#ifdef USBDEVFS_DISCONNECT
/* earlier Linux 2.4 do not support that */
- ret = ioctl(fd, USBDEVFS_DISCONNECT);
- if (ret < 0 && errno != ENODATA) {
- perror("USBDEVFS_DISCONNECT");
- goto fail;
+ {
+ struct usbdevfs_ioctl ctrl;
+ ctrl.ioctl_code = USBDEVFS_DISCONNECT;
+ ctrl.ifno = 0;
+ ret = ioctl(fd, USBDEVFS_IOCTL, &ctrl);
+ if (ret < 0 && errno != ENODATA) {
+ perror("USBDEVFS_DISCONNECT");
+ goto fail;
+ }
}
#endif
if (strlen(line) > 0)
line[strlen(line) - 1] = '\0';
if (line[0] == 'T' && line[1] == ':') {
- if (device_count) {
+ if (device_count && (vendor_id || product_id)) {
+ /* New device. Add the previously discovered device. */
ret = func(opaque, bus_num, addr, class_id, vendor_id,
product_id, product_name, speed);
if (ret)
}
fail: ;
}
- if (device_count) {
+ if (device_count && (vendor_id || product_id)) {
+ /* Add the last device. */
ret = func(opaque, bus_num, addr, class_id, vendor_id,
product_id, product_name, speed);
}