ref: 9f65da6d7049259d505552f483339057172959ba
parent: 961a87388965341f1217ec2b65f56aeb6ca1576c
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))
--
⑨