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:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user