length += sprintf (page, "usbserinfo:1.0 driver:%s\n", DRIVER_VERSION); 
length += sprintf (page, "usbserinfo:1.0 driver:2.0\n"); 
static int serial_read_proc (char *page, char **start, off_t off, int count, int *eof, void *data){	struct usb_serial *serial;	int length = 0;	int i;	off_t begin = 0;	char tmp[40];	dbg("%s", __FUNCTION__);	length += sprintf (page, "usbserinfo:1.0 driver:%s\n", DRIVER_VERSION);	for (i = 0; i < SERIAL_TTY_MINORS && length < PAGE_SIZE; ++i) {		serial = usb_serial_get_by_index(i);		if (serial == NULL)			continue;		length += sprintf (page+length, "%d:", i);		if (serial->type->driver.owner)			length += sprintf (page+length, " module:%s", module_name(serial->type->driver.owner));		length += sprintf (page+length, " name:\"%s\"", serial->type->description);		length += sprintf (page+length, " vendor:%04x product:%04x", 				   le16_to_cpu(serial->dev->descriptor.idVendor), 				   le16_to_cpu(serial->dev->descriptor.idProduct));		length += sprintf (page+length, " num_ports:%d", serial->num_ports);		length += sprintf (page+length, " port:%d", i - serial->minor + 1);		usb_make_path(serial->dev, tmp, sizeof(tmp));		length += sprintf (page+length, " path:%s", tmp);					length += sprintf (page+length, "\n");		if ((length + begin) > (off + count))			goto done;		if ((length + begin) < off) {			begin += length;			length = 0;		}		kref_put(&serial->kref, destroy_serial);	}	*eof = 1;done:	if (off >= (length + begin))		return 0;	*start = page + (off-begin);	return ((count < begin+length-off) ? count : begin+length-off);}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/17a882fc0c91477b2582a6dfd4ca93ae7eb58cd3/usb-serial.c/buggy/drivers/usb/serial/usb-serial.c