Merge changes I234b2f09,Ifdca65fc
am: 4c8326f8bb
Change-Id: Ie5dec66495a51a55a3eb6e3939d43b9a8623e045
diff --git a/autogen.sh b/autogen.sh
index ae7e6a1..65c4e2c 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -16,7 +16,8 @@
echo "Removing libtool cruft"
rm -f ltmain.sh config.guess config.sub
echo "Running libtoolize"
-libtoolize --copy --force || fail
+(glibtoolize --version) < /dev/null > /dev/null 2>&1 && LIBTOOLIZE=glibtoolize || LIBTOOLIZE=libtoolize
+$LIBTOOLIZE --copy --force || fail
# Refresh GNU autotools toolchain: aclocal autoheader
echo "Removing aclocal cruft"
diff --git a/src/libopenusb1-glue.c b/src/libopenusb1-glue.c
index 4d88f82..a4cfbad 100644
--- a/src/libopenusb1-glue.c
+++ b/src/libopenusb1-glue.c
@@ -1210,6 +1210,10 @@
PTPUSBBulkContainer usbdata;
uint64_t bytes_left_to_transfer;
PTPDataHandler memhandler;
+ unsigned long packet_size;
+ PTP_USB *ptp_usb = (PTP_USB *) params->data;
+
+ packet_size = ptp_usb->inep_maxpacket;
LIBMTP_USB_DEBUG("SEND DATA PHASE\n");
@@ -1252,7 +1256,9 @@
bytes_left_to_transfer = size - datawlen;
ret = PTP_RC_OK;
while (bytes_left_to_transfer > 0) {
- ret = ptp_write_func(bytes_left_to_transfer, handler, params->data, &written);
+ int max_long_transfer = ULONG_MAX + 1 - packet_size;
+ ret = ptp_write_func (bytes_left_to_transfer > max_long_transfer ? max_long_transfer : bytes_left_to_transfer,
+ handler, params->data, &written);
if (ret != PTP_RC_OK){
break;
}
diff --git a/src/libusb-glue.c b/src/libusb-glue.c
index 722a591..0079b08 100644
--- a/src/libusb-glue.c
+++ b/src/libusb-glue.c
@@ -1202,6 +1202,10 @@
PTPUSBBulkContainer usbdata;
uint64_t bytes_left_to_transfer;
PTPDataHandler memhandler;
+ unsigned long packet_size;
+ PTP_USB *ptp_usb = (PTP_USB *) params->data;
+
+ packet_size = ptp_usb->inep_maxpacket;
LIBMTP_USB_DEBUG("SEND DATA PHASE\n");
@@ -1242,7 +1246,9 @@
bytes_left_to_transfer = size-datawlen;
ret = PTP_RC_OK;
while(bytes_left_to_transfer > 0) {
- ret = ptp_write_func (bytes_left_to_transfer, handler, params->data, &written);
+ int max_long_transfer = ULONG_MAX + 1 - packet_size;
+ ret = ptp_write_func (bytes_left_to_transfer > max_long_transfer ? max_long_transfer : bytes_left_to_transfer,
+ handler, params->data, &written);
if (ret != PTP_RC_OK)
break;
if (written == 0) {
diff --git a/src/libusb1-glue.c b/src/libusb1-glue.c
index 8894378..3098553 100644
--- a/src/libusb1-glue.c
+++ b/src/libusb1-glue.c
@@ -1227,6 +1227,10 @@
PTPUSBBulkContainer usbdata;
uint64_t bytes_left_to_transfer;
PTPDataHandler memhandler;
+ unsigned long packet_size;
+ PTP_USB *ptp_usb = (PTP_USB *) params->data;
+
+ packet_size = ptp_usb->outep_maxpacket;
LIBMTP_USB_DEBUG("SEND DATA PHASE\n");
@@ -1267,7 +1271,9 @@
bytes_left_to_transfer = size-datawlen;
ret = PTP_RC_OK;
while(bytes_left_to_transfer > 0) {
- ret = ptp_write_func (bytes_left_to_transfer, handler, params->data, &written);
+ int max_long_transfer = ULONG_MAX + 1 - packet_size;
+ ret = ptp_write_func (bytes_left_to_transfer > max_long_transfer ? max_long_transfer : bytes_left_to_transfer,
+ handler, params->data, &written);
if (ret != PTP_RC_OK)
break;
if (written == 0) {