Loading media/mtp/IMtpHandle.h +1 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ public: virtual int write(const void *data, int len) = 0; // Return 0 if send/receive is successful, or -1 and errno is set virtual int receiveFile(mtp_file_range mfr) = 0; virtual int receiveFile(mtp_file_range mfr, bool zero_packet) = 0; virtual int sendFile(mtp_file_range mfr) = 0; virtual int sendEvent(mtp_event me) = 0; Loading media/mtp/MtpDevHandle.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ public: int read(void *data, int len); int write(const void *data, int len); int receiveFile(mtp_file_range mfr); int receiveFile(mtp_file_range mfr, bool); int sendFile(mtp_file_range mfr); int sendEvent(mtp_event me); Loading @@ -68,7 +68,7 @@ int MtpDevHandle::write(const void *data, int len) { return ::write(mFd, data, len); } int MtpDevHandle::receiveFile(mtp_file_range mfr) { int MtpDevHandle::receiveFile(mtp_file_range mfr, bool) { return ioctl(mFd, MTP_RECEIVE_FILE, reinterpret_cast<unsigned long>(&mfr)); } Loading media/mtp/MtpFfsHandle.cpp +8 −9 Original line number Diff line number Diff line Loading @@ -516,7 +516,7 @@ void MtpFfsHandle::close() { } /* Read from USB and write to a local file. */ int MtpFfsHandle::receiveFile(mtp_file_range mfr) { int MtpFfsHandle::receiveFile(mtp_file_range mfr, bool zero_packet) { // When receiving files, the incoming length is given in 32 bits. // A >4G file is given as 0xFFFFFFFF uint32_t file_length = mfr.length; Loading @@ -538,7 +538,7 @@ int MtpFfsHandle::receiveFile(mtp_file_range mfr) { aio.aio_fildes = mfr.fd; aio.aio_buf = nullptr; struct aiocb *aiol[] = {&aio}; int ret; int ret = -1; size_t length; bool read = false; bool write = false; Loading Loading @@ -590,11 +590,6 @@ int MtpFfsHandle::receiveFile(mtp_file_range mfr) { } else { // Receive an empty packet if size is a multiple of the endpoint size. file_length -= ret; if (file_length == 0 && ret % packet_size == 0) { if (TEMP_FAILURE_RETRY(::read(mBulkOut, data, packet_size)) != 0) { return -1; } } } // Enqueue a new write request aio.aio_buf = data; Loading @@ -610,6 +605,11 @@ int MtpFfsHandle::receiveFile(mtp_file_range mfr) { read = false; } } if (ret % packet_size == 0 || zero_packet) { if (TEMP_FAILURE_RETRY(::read(mBulkOut, data, packet_size)) != 0) { return -1; } } return 0; } Loading Loading @@ -660,10 +660,9 @@ int MtpFfsHandle::sendFile(mtp_file_range mfr) { sizeof(mtp_data_header), init_read_len, offset)) != init_read_len) return -1; if (writeHandle(mBulkIn, data, sizeof(mtp_data_header) + init_read_len) == -1) return -1; if (file_length == static_cast<unsigned>(init_read_len)) return 0; file_length -= init_read_len; offset += init_read_len; ret = 0; ret = init_read_len + sizeof(mtp_data_header); // Break down the file into pieces that fit in buffers while(file_length > 0) { Loading media/mtp/MtpFfsHandle.h +1 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ public: int read(void *data, int len); int write(const void *data, int len); int receiveFile(mtp_file_range mfr); int receiveFile(mtp_file_range mfr, bool zero_packet); int sendFile(mtp_file_range mfr); int sendEvent(mtp_event me); Loading media/mtp/MtpServer.cpp +26 −28 Original line number Diff line number Diff line Loading @@ -1052,7 +1052,6 @@ MtpResponseCode MtpServer::doSendObject() { ALOGE("failed to write initial data"); result = MTP_RESPONSE_GENERAL_ERROR; } else { if (mSendObjectFileSize - initialData > 0) { mfr.offset = initialData; if (mSendObjectFileSize == 0xFFFFFFFF) { // tell driver to read until it receives a short packet Loading @@ -1065,12 +1064,12 @@ MtpResponseCode MtpServer::doSendObject() { mfr.transaction_id = 0; // transfer the file ret = sHandle->receiveFile(mfr); ret = sHandle->receiveFile(mfr, mfr.length == 0 && initialData == MTP_BUFFER_SIZE - MTP_CONTAINER_HEADER_SIZE); if ((ret < 0) && (errno == ECANCELED)) { isCanceled = true; } } } struct stat sstat; fstat(mfr.fd, &sstat); close(mfr.fd); Loading Loading @@ -1256,7 +1255,6 @@ MtpResponseCode MtpServer::doSendPartialObject() { if (ret < 0) { ALOGE("failed to write initial data"); } else { if (length > 0) { mtp_file_range mfr; mfr.fd = edit->mFD; mfr.offset = offset; Loading @@ -1265,12 +1263,12 @@ MtpResponseCode MtpServer::doSendPartialObject() { mfr.transaction_id = 0; // transfer the file ret = sHandle->receiveFile(mfr); ret = sHandle->receiveFile(mfr, mfr.length == 0 && initialData == MTP_BUFFER_SIZE - MTP_CONTAINER_HEADER_SIZE); if ((ret < 0) && (errno == ECANCELED)) { isCanceled = true; } } } if (ret < 0) { mResponse.setParameter(1, 0); if (isCanceled) Loading Loading
media/mtp/IMtpHandle.h +1 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,7 @@ public: virtual int write(const void *data, int len) = 0; // Return 0 if send/receive is successful, or -1 and errno is set virtual int receiveFile(mtp_file_range mfr) = 0; virtual int receiveFile(mtp_file_range mfr, bool zero_packet) = 0; virtual int sendFile(mtp_file_range mfr) = 0; virtual int sendEvent(mtp_event me) = 0; Loading
media/mtp/MtpDevHandle.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -45,7 +45,7 @@ public: int read(void *data, int len); int write(const void *data, int len); int receiveFile(mtp_file_range mfr); int receiveFile(mtp_file_range mfr, bool); int sendFile(mtp_file_range mfr); int sendEvent(mtp_event me); Loading @@ -68,7 +68,7 @@ int MtpDevHandle::write(const void *data, int len) { return ::write(mFd, data, len); } int MtpDevHandle::receiveFile(mtp_file_range mfr) { int MtpDevHandle::receiveFile(mtp_file_range mfr, bool) { return ioctl(mFd, MTP_RECEIVE_FILE, reinterpret_cast<unsigned long>(&mfr)); } Loading
media/mtp/MtpFfsHandle.cpp +8 −9 Original line number Diff line number Diff line Loading @@ -516,7 +516,7 @@ void MtpFfsHandle::close() { } /* Read from USB and write to a local file. */ int MtpFfsHandle::receiveFile(mtp_file_range mfr) { int MtpFfsHandle::receiveFile(mtp_file_range mfr, bool zero_packet) { // When receiving files, the incoming length is given in 32 bits. // A >4G file is given as 0xFFFFFFFF uint32_t file_length = mfr.length; Loading @@ -538,7 +538,7 @@ int MtpFfsHandle::receiveFile(mtp_file_range mfr) { aio.aio_fildes = mfr.fd; aio.aio_buf = nullptr; struct aiocb *aiol[] = {&aio}; int ret; int ret = -1; size_t length; bool read = false; bool write = false; Loading Loading @@ -590,11 +590,6 @@ int MtpFfsHandle::receiveFile(mtp_file_range mfr) { } else { // Receive an empty packet if size is a multiple of the endpoint size. file_length -= ret; if (file_length == 0 && ret % packet_size == 0) { if (TEMP_FAILURE_RETRY(::read(mBulkOut, data, packet_size)) != 0) { return -1; } } } // Enqueue a new write request aio.aio_buf = data; Loading @@ -610,6 +605,11 @@ int MtpFfsHandle::receiveFile(mtp_file_range mfr) { read = false; } } if (ret % packet_size == 0 || zero_packet) { if (TEMP_FAILURE_RETRY(::read(mBulkOut, data, packet_size)) != 0) { return -1; } } return 0; } Loading Loading @@ -660,10 +660,9 @@ int MtpFfsHandle::sendFile(mtp_file_range mfr) { sizeof(mtp_data_header), init_read_len, offset)) != init_read_len) return -1; if (writeHandle(mBulkIn, data, sizeof(mtp_data_header) + init_read_len) == -1) return -1; if (file_length == static_cast<unsigned>(init_read_len)) return 0; file_length -= init_read_len; offset += init_read_len; ret = 0; ret = init_read_len + sizeof(mtp_data_header); // Break down the file into pieces that fit in buffers while(file_length > 0) { Loading
media/mtp/MtpFfsHandle.h +1 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ public: int read(void *data, int len); int write(const void *data, int len); int receiveFile(mtp_file_range mfr); int receiveFile(mtp_file_range mfr, bool zero_packet); int sendFile(mtp_file_range mfr); int sendEvent(mtp_event me); Loading
media/mtp/MtpServer.cpp +26 −28 Original line number Diff line number Diff line Loading @@ -1052,7 +1052,6 @@ MtpResponseCode MtpServer::doSendObject() { ALOGE("failed to write initial data"); result = MTP_RESPONSE_GENERAL_ERROR; } else { if (mSendObjectFileSize - initialData > 0) { mfr.offset = initialData; if (mSendObjectFileSize == 0xFFFFFFFF) { // tell driver to read until it receives a short packet Loading @@ -1065,12 +1064,12 @@ MtpResponseCode MtpServer::doSendObject() { mfr.transaction_id = 0; // transfer the file ret = sHandle->receiveFile(mfr); ret = sHandle->receiveFile(mfr, mfr.length == 0 && initialData == MTP_BUFFER_SIZE - MTP_CONTAINER_HEADER_SIZE); if ((ret < 0) && (errno == ECANCELED)) { isCanceled = true; } } } struct stat sstat; fstat(mfr.fd, &sstat); close(mfr.fd); Loading Loading @@ -1256,7 +1255,6 @@ MtpResponseCode MtpServer::doSendPartialObject() { if (ret < 0) { ALOGE("failed to write initial data"); } else { if (length > 0) { mtp_file_range mfr; mfr.fd = edit->mFD; mfr.offset = offset; Loading @@ -1265,12 +1263,12 @@ MtpResponseCode MtpServer::doSendPartialObject() { mfr.transaction_id = 0; // transfer the file ret = sHandle->receiveFile(mfr); ret = sHandle->receiveFile(mfr, mfr.length == 0 && initialData == MTP_BUFFER_SIZE - MTP_CONTAINER_HEADER_SIZE); if ((ret < 0) && (errno == ECANCELED)) { isCanceled = true; } } } if (ret < 0) { mResponse.setParameter(1, 0); if (isCanceled) Loading