am dec0b755: Merge "MTP host: Fix problems reading large data packets" into honeycomb-mr1

* commit 'dec0b755fff1bf87aafd397ef0dd864f54c587cf':
  MTP host: Fix problems reading large data packets
This commit is contained in:
Mike Lockwood
2011-03-14 06:55:21 -07:00
committed by Android Git Automerger

View File

@@ -28,7 +28,7 @@
namespace android { namespace android {
MtpDataPacket::MtpDataPacket() MtpDataPacket::MtpDataPacket()
: MtpPacket(512), : MtpPacket(16384), // MAX_USBFS_BUFFER_SIZE
mOffset(MTP_CONTAINER_HEADER_SIZE) mOffset(MTP_CONTAINER_HEADER_SIZE)
{ {
} }
@@ -399,10 +399,10 @@ int MtpDataPacket::read(struct usb_request *request) {
if (length >= MTP_CONTAINER_HEADER_SIZE) { if (length >= MTP_CONTAINER_HEADER_SIZE) {
// look at the length field to see if the data spans multiple packets // look at the length field to see if the data spans multiple packets
uint32_t totalLength = MtpPacket::getUInt32(MTP_CONTAINER_LENGTH_OFFSET); uint32_t totalLength = MtpPacket::getUInt32(MTP_CONTAINER_LENGTH_OFFSET);
allocate(totalLength);
while (totalLength > length) { while (totalLength > length) {
allocate(length + mAllocationIncrement);
request->buffer = mBuffer + length; request->buffer = mBuffer + length;
request->buffer_length = mAllocationIncrement; request->buffer_length = totalLength - length;
int ret = transfer(request); int ret = transfer(request);
if (ret >= 0) if (ret >= 0)
length += ret; length += ret;