summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Langdale <philipl@overt.org>2013-04-05 14:00:28 -0700
committerLinus Walleij <triad@df.lth.se>2013-04-09 22:41:44 +0200
commitabdd59de34e74dec76930a567679cde849bfbb94 (patch)
treed5e061a971325dbac88e94bf043a50ec1d4cfc22
parent1a5fe0ae4de66d1ca97f7ae712d75b409b1a7841 (diff)
downloadlibmtp-abdd59de34e74dec76930a567679cde849bfbb94.tar.gz
libmtp: Support > 4GB file transfers
The libmtp specific piece of supporting > 4GB file transfers was missing. Signed-off-by: Philip Langdale <philipl@overt.org> Signed-off-by: Linus Walleij <triad@df.lth.se>
-rw-r--r--src/libmtp.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/libmtp.c b/src/libmtp.c
index dab756d..46edab7 100644
--- a/src/libmtp.c
+++ b/src/libmtp.c
@@ -6191,8 +6191,12 @@ static int send_file_object_info(LIBMTP_mtpdevice_t *device, LIBMTP_file_t *file
if (FLAG_ONLY_7BIT_FILENAMES(ptp_usb)) {
strip_7bit_from_utf8(new_file.Filename);
}
- // We lose precision here.
- new_file.ObjectCompressedSize = (uint32_t) filedata->filesize;
+ if (filedata->filesize > 0xFFFFFFFFL) {
+ // This is a kludge in the MTP standard for large files.
+ new_file.ObjectCompressedSize = (uint32_t) 0xFFFFFFFF;
+ } else {
+ new_file.ObjectCompressedSize = (uint32_t) filedata->filesize;
+ }
new_file.ObjectFormat = of;
new_file.StorageID = store;
new_file.ParentObject = localph;