ref: 847b1b85a0e9dd6f362bd359a35da25fe1613079
parent: a34d2432071666b09b04ef402b9456036945da4a
author: cinap_lenrek <cinap_lenrek@centraldogma>
date: Tue Aug 16 20:46:33 EDT 2011
usb/ptp: ignore zero reads
--- a/sys/src/cmd/nusb/ptp/usbptp.c
+++ b/sys/src/cmd/nusb/ptp/usbptp.c
@@ -122,10 +122,13 @@
static int
usbread(Dev *ep, void *data, int len)
{- int n;
+ int n, try;
- for(;;){+ n = 0;
+ for(try = 0; try < 4; try++){n = read(ep->dfd, data, len);
+ if(n == 0)
+ continue;
if(n >= 0 || !isinterrupt())
break;
}
@@ -135,10 +138,13 @@
static int
usbwrite(Dev *ep, void *data, int len)
{- int n;
+ int n, try;
- for(;;){+ n = 0;
+ for(try = 0; try < 4; try++){n = write(ep->dfd, data, len);
+ if(n == 0)
+ continue;
if(n >= 0 || !isinterrupt())
break;
}
@@ -198,7 +204,7 @@
char *s;
if(length < 4+2+2+4){- werrstr("short response");+ werrstr("short response: %d < %d", length, 4+2+2+4);return -1;
}
if(GET4(rpc->length) < length){@@ -291,6 +297,7 @@
if((n = usbread(usbep[In], &rpc, sizeof(rpc))) < 0)
return -1;
+
if(debug)
hexdump("data<", (uchar*)&rpc, n);if(ptpcheckerr(&rpc, 2, t, n))
--
⑨