patch-2.4.27 linux-2.4.27/drivers/usb/devio.c
Next file: linux-2.4.27/drivers/usb/drivers.c
Previous file: linux-2.4.27/drivers/usb/brlvger.c
Back to the patch index
Back to the overall index
- Lines: 55
- Date:
2004-08-07 16:26:05.682389018 -0700
- Orig file:
linux-2.4.26/drivers/usb/devio.c
- Orig date:
2003-11-28 10:26:20.000000000 -0800
diff -urN linux-2.4.26/drivers/usb/devio.c linux-2.4.27/drivers/usb/devio.c
@@ -80,7 +80,7 @@
struct dev_state *ps = (struct dev_state *)file->private_data;
ssize_t ret = 0;
unsigned len;
- loff_t pos;
+ loff_t pos, last;
int i;
pos = *ppos;
@@ -102,37 +102,38 @@
goto err;
}
- *ppos += len;
+ pos += len;
buf += len;
nbytes -= len;
ret += len;
}
- pos = sizeof(struct usb_device_descriptor);
+ last = sizeof(struct usb_device_descriptor);
for (i = 0; nbytes && i < ps->dev->descriptor.bNumConfigurations; i++) {
struct usb_config_descriptor *config =
(struct usb_config_descriptor *)ps->dev->rawdescriptors[i];
unsigned int length = le16_to_cpu(config->wTotalLength);
- if (*ppos < pos + length) {
- len = length - (*ppos - pos);
+ if (pos < last + length) {
+ len = length - (pos - last);
if (len > nbytes)
len = nbytes;
if (copy_to_user(buf,
- ps->dev->rawdescriptors[i] + (*ppos - pos), len)) {
+ ps->dev->rawdescriptors[i] + (pos - last), len)) {
ret = -EFAULT;
goto err;
}
- *ppos += len;
+ pos += len;
buf += len;
nbytes -= len;
ret += len;
}
- pos += length;
+ last += length;
}
+ *ppos = pos;
err:
up_read(&ps->devsem);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)