From faaa32999d56fd8253453d7e307cb6932b00145a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Artur=20M=C4=85drzak?= Date: Tue, 15 Dec 2020 09:10:04 +0100 Subject: Fix data read for single usb packet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For device, that sends combined header and data in single usb packet ptp_getdata function issue USB read request where there is no more data to be read. This leads to raise IO error, as device doesn't send anymore data because it's already finished transfer. Signed-off-by: Artur MÄ…drzak --- src/libopenusb1-glue.c | 4 ++++ src/libusb-glue.c | 4 ++++ src/libusb1-glue.c | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/src/libopenusb1-glue.c b/src/libopenusb1-glue.c index 294c427..8dd9e06 100644 --- a/src/libopenusb1-glue.c +++ b/src/libopenusb1-glue.c @@ -1361,6 +1361,10 @@ ptp_usb_getdata(PTPParams* params, PTPContainer* ptp, PTPDataHandler *handler) { if (putfunc_ret != PTP_RC_OK) return putfunc_ret; + /* Nothing more left to read*/ + if (rlen == usbdata.length) + return PTP_RC_OK; + /* stuff data directly to passed data handler */ while (1) { unsigned long readdata; diff --git a/src/libusb-glue.c b/src/libusb-glue.c index 3c1b023..b770163 100644 --- a/src/libusb-glue.c +++ b/src/libusb-glue.c @@ -1349,6 +1349,10 @@ ptp_usb_getdata (PTPParams* params, PTPContainer* ptp, PTPDataHandler *handler) if (putfunc_ret != PTP_RC_OK) return putfunc_ret; + /* Nothing more left to read*/ + if (rlen == usbdata.length) + return PTP_RC_OK; + /* stuff data directly to passed data handler */ while (1) { unsigned long readdata; diff --git a/src/libusb1-glue.c b/src/libusb1-glue.c index ffffa01..0992b2a 100644 --- a/src/libusb1-glue.c +++ b/src/libusb1-glue.c @@ -1453,6 +1453,10 @@ ptp_usb_getdata (PTPParams* params, PTPContainer* ptp, PTPDataHandler *handler) if (putfunc_ret != PTP_RC_OK) return ptp_read_cancel_func(params, ptp->Transaction_ID); + /* Nothing more left to read*/ + if (rlen == usbdata.length) + return PTP_RC_OK; + /* stuff data directly to passed data handler */ while (1) { unsigned long readdata; -- cgit v1.2.1