summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;