Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5e6df68c authored by Jerry Zhang's avatar Jerry Zhang
Browse files

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
parent fbe5bd5d
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -542,6 +542,7 @@ int MtpFfsHandle::receiveFile(mtp_file_range mfr, bool zero_packet) {
    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 @@ int MtpFfsHandle::receiveFile(mtp_file_range mfr, bool zero_packet) {
                // 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 @@ int MtpFfsHandle::receiveFile(mtp_file_range mfr, bool zero_packet) {
            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;
        }