diff options
author | Mike Lockwood <lockwood@android.com> | 2010-11-16 17:38:43 -0500 |
---|---|---|
committer | Mike Lockwood <lockwood@android.com> | 2010-11-17 16:43:24 -0500 |
commit | e1b8cf1cafb75ce1339b67eb1764e224a257c579 (patch) | |
tree | 3881a3df3eb3e1d6dd6eb37ae446cb76bf33cf18 /media/mtp | |
parent | d0e9487cd8b2b4ef63583ebedfdce30b3d098f15 (diff) | |
download | frameworks_av-e1b8cf1cafb75ce1339b67eb1764e224a257c579.zip frameworks_av-e1b8cf1cafb75ce1339b67eb1764e224a257c579.tar.gz frameworks_av-e1b8cf1cafb75ce1339b67eb1764e224a257c579.tar.bz2 |
MTP: Fixes to allow file transfers > 4 gigabytes
BUG: 3198248
Change-Id: I6f11c79a19d7bdd63718a7370939124b1262d221
Signed-off-by: Mike Lockwood <lockwood@android.com>
Diffstat (limited to 'media/mtp')
-rw-r--r-- | media/mtp/MtpDatabase.h | 1 | ||||
-rw-r--r-- | media/mtp/MtpServer.cpp | 10 |
2 files changed, 10 insertions, 1 deletions
diff --git a/media/mtp/MtpDatabase.h b/media/mtp/MtpDatabase.h index fafd221..900b517 100644 --- a/media/mtp/MtpDatabase.h +++ b/media/mtp/MtpDatabase.h @@ -42,6 +42,7 @@ public: virtual void endSendObject(const char* path, MtpObjectHandle handle, MtpObjectFormat format, + int64_t size, bool succeeded) = 0; virtual MtpObjectHandleList* getObjectList(MtpStorageID storageID, diff --git a/media/mtp/MtpServer.cpp b/media/mtp/MtpServer.cpp index 7edbeb4..ca13636 100644 --- a/media/mtp/MtpServer.cpp +++ b/media/mtp/MtpServer.cpp @@ -664,6 +664,7 @@ MtpResponseCode MtpServer::doSendObject() { MtpResponseCode result = MTP_RESPONSE_OK; mode_t mask; int ret; + uint64_t actualSize = -1; if (mSendObjectHandle == kInvalidObjectHandle) { LOGE("Expected SendObjectInfo before SendObject"); @@ -706,11 +707,18 @@ MtpResponseCode MtpServer::doSendObject() { result = MTP_RESPONSE_TRANSACTION_CANCELLED; else result = MTP_RESPONSE_GENERAL_ERROR; + } else if (mSendObjectFileSize == 0xFFFFFFFF) { + // actual size is likely > 4 gig so stat the file to compute actual length + struct stat s; + if (lstat(mSendObjectFilePath, &s) == 0) { + actualSize = s.st_size; + LOGD("actualSize: %lld\n", actualSize); + } } done: mDatabase->endSendObject(mSendObjectFilePath, mSendObjectHandle, mSendObjectFormat, - result == MTP_RESPONSE_OK); + actualSize, result == MTP_RESPONSE_OK); mSendObjectHandle = kInvalidObjectHandle; mSendObjectFormat = 0; return result; |