usb/ptp: ignore zero reads
parent
961a873889
commit
9f65da6d70
|
@ -122,10 +122,13 @@ isinterrupt(void)
|
||||||
static int
|
static int
|
||||||
usbread(Dev *ep, void *data, int len)
|
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);
|
n = read(ep->dfd, data, len);
|
||||||
|
if(n == 0)
|
||||||
|
continue;
|
||||||
if(n >= 0 || !isinterrupt())
|
if(n >= 0 || !isinterrupt())
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -135,10 +138,13 @@ usbread(Dev *ep, void *data, int len)
|
||||||
static int
|
static int
|
||||||
usbwrite(Dev *ep, void *data, int len)
|
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);
|
n = write(ep->dfd, data, len);
|
||||||
|
if(n == 0)
|
||||||
|
continue;
|
||||||
if(n >= 0 || !isinterrupt())
|
if(n >= 0 || !isinterrupt())
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -198,7 +204,7 @@ ptpcheckerr(Ptprpc *rpc, int type, int transid, int length)
|
||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
if(length < 4+2+2+4){
|
if(length < 4+2+2+4){
|
||||||
werrstr("short response");
|
werrstr("short response: %d < %d", length, 4+2+2+4);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if(GET4(rpc->length) < length){
|
if(GET4(rpc->length) < length){
|
||||||
|
@ -291,6 +297,7 @@ ptprpc(int code, int flags, ...)
|
||||||
|
|
||||||
if((n = usbread(usbep[In], &rpc, sizeof(rpc))) < 0)
|
if((n = usbread(usbep[In], &rpc, sizeof(rpc))) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if(debug)
|
if(debug)
|
||||||
hexdump("data<", (uchar*)&rpc, n);
|
hexdump("data<", (uchar*)&rpc, n);
|
||||||
if(ptpcheckerr(&rpc, 2, t, n))
|
if(ptpcheckerr(&rpc, 2, t, n))
|
||||||
|
|
Loading…
Reference in New Issue