fix copy large file issue over MTP on 32bit device
change offset variable type from off_t to loff_t, then it won't overflow
when the offset value is larger than 2GB.
change the pwrite and pread function to be pwrite64 and pread64 so the
offset parameter won't overflow.
Change-Id: I45947479a59a4240fd708787384bcadee09d8947
Signed-off-by: faqiang.zhu <faqiang.zhu@nxp.com>
diff --git a/media/mtp/PosixAsyncIO.cpp b/media/mtp/PosixAsyncIO.cpp
index 72c07cc..8205e3b 100644
--- a/media/mtp/PosixAsyncIO.cpp
+++ b/media/mtp/PosixAsyncIO.cpp
@@ -47,10 +47,10 @@
CHECK(aiocbp->queued);
int ret;
if (aiocbp->read) {
- ret = TEMP_FAILURE_RETRY(pread(aiocbp->aio_fildes,
+ ret = TEMP_FAILURE_RETRY(pread64(aiocbp->aio_fildes,
aiocbp->aio_buf, aiocbp->aio_nbytes, aiocbp->aio_offset));
} else {
- ret = TEMP_FAILURE_RETRY(pwrite(aiocbp->aio_fildes,
+ ret = TEMP_FAILURE_RETRY(pwrite64(aiocbp->aio_fildes,
aiocbp->aio_buf, aiocbp->aio_nbytes, aiocbp->aio_offset));
}
{
@@ -139,7 +139,7 @@
return 0;
}
-void aio_prepare(struct aiocb *aiocbp, void* buf, size_t count, off_t offset) {
+void aio_prepare(struct aiocb *aiocbp, void* buf, size_t count, off64_t offset) {
aiocbp->aio_buf = buf;
aiocbp->aio_offset = offset;
aiocbp->aio_nbytes = count;