From 868c605e87652ea6be16e95c192cce4e465c513d Mon Sep 17 00:00:00 2001 From: Kirill Maloletkov Date: Wed, 26 Oct 2016 13:19:26 +0300 Subject: [PATCH] Fixed reading the data within the block. --- .../java/net/alphadev/usbstorage/bbb/BulkBlockDevice.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scsi/src/main/java/net/alphadev/usbstorage/bbb/BulkBlockDevice.java b/scsi/src/main/java/net/alphadev/usbstorage/bbb/BulkBlockDevice.java index d1eb3c2..3ad8731 100644 --- a/scsi/src/main/java/net/alphadev/usbstorage/bbb/BulkBlockDevice.java +++ b/scsi/src/main/java/net/alphadev/usbstorage/bbb/BulkBlockDevice.java @@ -189,8 +189,10 @@ public void read(long offsetBytes, ByteBuffer buffer) { final int blocksPerTransfer = mMaxTransferSize / mBlockSize; int offsetBlocks = (int) (offsetBytes / mBlockSize); + int blockOffset = (int) (offsetBytes % mBlockSize); int blocksLeft = (short) Math.ceil((float) buffer.remaining() / mBlockSize); + boolean isFirstBlock = true; while (blocksLeft > 0) { final short requestedBlocks = (short) Math.min(blocksPerTransfer, blocksLeft); final int requestedSize = requestedBlocks * mBlockSize; @@ -205,8 +207,10 @@ public void read(long offsetBytes, ByteBuffer buffer) { final byte[] buf = mAbstractBulkDevice.read(mBlockSize); if (blocksLeft-- > 0) { - final int subLength = Math.min(mBlockSize, buffer.remaining()); - buffer.put(buf, 0, subLength); + final int subLength = Math.min(mBlockSize - (isFirstBlock ? blockOffset : 0), buffer.remaining()); + buffer.put(buf, (isFirstBlock ? blockOffset : 0), subLength); + + isFirstBlock = false; } }