Fix early termination of while loop in BluetoothSocket#write

While loop exits too early and misses writing remaining bytes.
Also restructured the loop itself to be more readable.

Change-Id: I71e9b331d20b5ae70175450c3346be43ab56c40c
This commit is contained in:
Christine Hallstrom
2016-06-17 16:00:25 -07:00
committed by Andre Eisenbach
parent 01e7c10d37
commit fc59c344bf

View File

@@ -532,22 +532,19 @@ public final class BluetoothSocket implements Closeable {
if(length <= mMaxTxPacketSize) {
mSocketOS.write(b, offset, length);
} else {
int tmpOffset = offset;
int tmpLength = mMaxTxPacketSize;
int endIndex = offset + length;
boolean done = false;
if(DBG) Log.w(TAG, "WARNING: Write buffer larger than L2CAP packet size!\n"
+ "Packet will be divided into SDU packets of size "
+ mMaxTxPacketSize);
do{
int tmpOffset = offset;
int bytesToWrite = length;
while (bytesToWrite > 0) {
int tmpLength = (bytesToWrite > mMaxTxPacketSize)
? mMaxTxPacketSize
: bytesToWrite;
mSocketOS.write(b, tmpOffset, tmpLength);
tmpOffset += mMaxTxPacketSize;
if((tmpOffset + mMaxTxPacketSize) > endIndex) {
tmpLength = endIndex - tmpOffset;
done = true;
}
} while(!done);
tmpOffset += tmpLength;
bytesToWrite -= tmpLength;
}
}
} else {
mSocketOS.write(b, offset, length);