On Tue, Sep 09, 2014 at 02:20:43PM +0200, Lubomir Rintel wrote:
The manufacurer and product from USB device itself are usually not
particularly
useful -- they tend to be missing, or ugly (all-uppercase, padded with spaces,
etc.). Prefer what's in the usb id database and fall back to descriptors only
if the device is too now to be in database.
This last sentence doesn't make much sense.
URLs aren't accessible for me, but I guess this is text-only anyway,
so why couldn't it be part of the message?
src/node_device/node_device_udev.c | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/src/node_device/node_device_udev.c b/src/node_device/node_device_udev.c
index 0fe474d..53792f0 100644
--- a/src/node_device/node_device_udev.c
+++ b/src/node_device/node_device_udev.c
@@ -580,6 +580,7 @@ static int udevProcessUSBDevice(struct udev_device *device,
{
union _virNodeDevCapData *data = &def->caps->data;
int ret = -1;
+ int err;
if (udevGetUintProperty(device,
"BUSNUM",
@@ -602,10 +603,17 @@ static int udevProcessUSBDevice(struct udev_device *device,
goto out;
}
- if (udevGetStringSysfsAttr(device,
- "manufacturer",
- &data->usb_dev.vendor_name) == PROPERTY_ERROR) {
+ err = udevGetStringProperty(device,
+ "ID_VENDOR_FROM_DATABASE",
+ &data->usb_dev.vendor_name);
+ if (err == PROPERTY_ERROR)
goto out;
+ if (err == PROPERTY_MISSING) {
+ if (udevGetStringSysfsAttr(device,
+ "manufacturer",
+ &data->usb_dev.vendor_name) == PROPERTY_ERROR)
{
+ goto out;
+ }
}
Bare with me as I'm not that familiar with udev API, but does this
make sense for USB devices only?
Other than that, the vendor name looks like a output-only, so it can
be changed and apps shouldn't rely on it.
Martin