DO NOT MERGE : Fix file transfer corner case.
For transfers >4G, we don't need to read an empty
packet since it will have been read already.
Test: Transfer 4394598388 byte file
Bug: 65423303
Change-Id: I4b6e742364332db3baaadc0db99885ba720c2afc
diff --git a/media/mtp/MtpFfsHandle.cpp b/media/mtp/MtpFfsHandle.cpp
index 4132fed..ad1105a 100644
--- a/media/mtp/MtpFfsHandle.cpp
+++ b/media/mtp/MtpFfsHandle.cpp
@@ -542,6 +542,7 @@
size_t length;
bool read = false;
bool write = false;
+ bool short_packet = false;
posix_fadvise(mfr.fd, 0, 0, POSIX_FADV_SEQUENTIAL | POSIX_FADV_NOREUSE);
@@ -586,6 +587,7 @@
// For larger files, receive until a short packet is received.
if (static_cast<size_t>(ret) < length) {
file_length = 0;
+ short_packet = true;
}
} else {
// Receive an empty packet if size is a multiple of the endpoint size.
@@ -605,7 +607,7 @@
read = false;
}
}
- if (ret % packet_size == 0 || zero_packet) {
+ if ((ret % packet_size == 0 && !short_packet) || zero_packet) {
if (TEMP_FAILURE_RETRY(::read(mBulkOut, data, packet_size)) != 0) {
return -1;
}