diff options
author | Kay Sievers <kay.sievers@vrfy.org> | 2007-10-15 20:38:20 +0200 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2007-10-15 20:38:20 +0200 |
commit | 963033472f8d2aab0bf77147b916de8f3b0b5450 (patch) | |
tree | d9406d521eec468a181cf7da78db39f3e09d22b3 /extras | |
parent | 8e37efe4223c4e495aa2e907e60684c54fdec356 (diff) |
usb_id: fail if vendor/product can not be retrieved
Thanks to Daniel Drake for identifying the bug.
Diffstat (limited to 'extras')
-rw-r--r-- | extras/usb_id/usb_id.c | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/extras/usb_id/usb_id.c b/extras/usb_id/usb_id.c index d36a27b3cc..5fb030db56 100644 --- a/extras/usb_id/usb_id.c +++ b/extras/usb_id/usb_id.c @@ -1,7 +1,5 @@ /* - * usb_id.c - * - * Identify an USB (block) device + * usb_id - identify an USB device * * Copyright (c) 2005 SUSE Linux Products GmbH, Germany * @@ -224,8 +222,6 @@ static int usb_id(const char *devpath) struct sysfs_device *dev; struct sysfs_device *dev_interface; struct sysfs_device *dev_usb; - const char *scsi_model, *scsi_vendor, *scsi_type, *scsi_rev; - const char *usb_model = NULL, *usb_vendor = NULL, *usb_rev, *usb_serial; const char *if_class, *if_subclass; int if_class_num; int protocol = 0; @@ -271,6 +267,7 @@ static int usb_id(const char *devpath) /* mass storage */ if (protocol == 6 && !use_usb_info) { struct sysfs_device *dev_scsi; + const char *scsi_model, *scsi_vendor, *scsi_type, *scsi_rev; int host, bus, target, lun; /* get scsi device */ @@ -321,40 +318,50 @@ static int usb_id(const char *devpath) } fallback: - /* Fallback to USB vendor & device */ + /* fallback to USB vendor & device */ if (vendor_str[0] == '\0') { + const char *usb_vendor = NULL; + if (!use_num_info) - if (!(usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "manufacturer"))) - dbg("No USB vendor string found, using idVendor"); + usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "manufacturer"); + + if (!usb_vendor) + usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "idVendor"); if (!usb_vendor) { - if (!(usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "idVendor"))) { - dbg("No USB vendor information available\n"); - sprintf(vendor_str,"0000"); - } + info("No USB vendor information available"); + return 1; } - set_str(vendor_str,usb_vendor, sizeof(vendor_str) - 1); + set_str(vendor_str, usb_vendor, sizeof(vendor_str)-1); } - + if (model_str[0] == '\0') { + const char *usb_model = NULL; + if (!use_num_info) - if (!(usb_model = sysfs_attr_get_value(dev_usb->devpath, "product"))) - dbg("No USB model string found, using idProduct"); - + usb_model = sysfs_attr_get_value(dev_usb->devpath, "product"); + + if (!usb_model) + usb_model = sysfs_attr_get_value(dev_usb->devpath, "idProduct"); + if (!usb_model) { - if (!(usb_model = sysfs_attr_get_value(dev_usb->devpath, "idProduct"))) - dbg("No USB model information available\n"); sprintf(model_str,"0000"); + dbg("No USB model information available"); + return 1; } - set_str(model_str, usb_model, sizeof(model_str) - 1); + set_str(model_str, usb_model, sizeof(model_str)-1); } if (revision_str[0] == '\0') { + const char *usb_rev; + usb_rev = sysfs_attr_get_value(dev_usb->devpath, "bcdDevice"); if (usb_rev) set_str(revision_str, usb_rev, sizeof(revision_str)-1); } if (serial_str[0] == '\0') { + const char *usb_serial; + usb_serial = sysfs_attr_get_value(dev_usb->devpath, "serial"); if (usb_serial) set_str(serial_str, usb_serial, sizeof(serial_str)-1); |