summaryrefslogtreecommitdiff
path: root/extras/usb_id/usb_id.c
diff options
context:
space:
mode:
authorDavid Zeuthen <david@fubar.dk>2009-02-17 14:15:17 -0500
committerKay Sievers <kay@linux-v6qv.(none)>2009-02-17 21:45:43 +0100
commitad88f9409a546ed3f1d69df66040a8f19b6eeafb (patch)
tree98e2fb3060ba0a95edbfe6451fbc219358f00691 /extras/usb_id/usb_id.c
parentdc9aa5e941a0aabde9d8ee225a0c5508fa5f83a1 (diff)
*_id: add model/vendor enc strings
So ID_MODEL and ID_VENDOR are pretty useful keys. However since we fix them up (removing leading/trailing whitespace, converts spaces to underscores) for use in device naming etc. we also force these fixups on the desktop shell. And this looks pretty ugly. The attached patch introduces the ID_MODEL_ENC and ID_VENDOR_ENC keys that contains the encoded version of the raw strings obtained. It's pretty similar in spirit to ID_FS_LABEL and its cousin ID_FS_LABEL_ENC. With this patch a desktop shell can fix up these strings as it sees fit. Note that some fixup is still needed though, for example # /lib/udev/ata_id --export /dev/sda |grep ID_MODEL ID_MODEL=INTEL_SSDSA2MH080G1GC ID_MODEL_ENC=INTEL\x20SSDSA2MH080G1GC\x20\x20\x20\x20\x20\x20\x20\x20 \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 Note the trailing and leading whitespace. Anyway with the attached patch the desktop shell should be able to display "INTEL SSDSA2MH080G1GC" rather than "INTEL_SSDSA2MH080G1GC" to the user.
Diffstat (limited to 'extras/usb_id/usb_id.c')
-rw-r--r--extras/usb_id/usb_id.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/extras/usb_id/usb_id.c b/extras/usb_id/usb_id.c
index 3d007f9ee5..39576e4504 100644
--- a/extras/usb_id/usb_id.c
+++ b/extras/usb_id/usb_id.c
@@ -38,6 +38,8 @@ static void log_fn(struct udev *udev, int priority,
static char vendor_str[64];
static char model_str[64];
+static char model_str_enc[256];
+static char vendor_str_enc[256];
static char serial_str[UTIL_NAME_SIZE];
static char revision_str[64];
static char type_str[64];
@@ -251,6 +253,7 @@ static int usb_id(struct udev_device *dev)
udev_device_get_sysname(dev_scsi));
goto fallback;
}
+ udev_util_encode_string(scsi_vendor, vendor_str_enc, sizeof(vendor_str_enc));
udev_util_replace_whitespace(scsi_vendor, vendor_str, sizeof(vendor_str)-1);
udev_util_replace_chars(vendor_str, NULL);
@@ -260,6 +263,7 @@ static int usb_id(struct udev_device *dev)
udev_device_get_sysname(dev_scsi));
goto fallback;
}
+ udev_util_encode_string(scsi_model, model_str_enc, sizeof(model_str_enc));
udev_util_replace_whitespace(scsi_model, model_str, sizeof(model_str)-1);
udev_util_replace_chars(model_str, NULL);
@@ -302,6 +306,7 @@ fallback:
info(udev, "No USB vendor information available\n");
return 1;
}
+ udev_util_encode_string(usb_vendor, vendor_str_enc, sizeof(vendor_str_enc));
udev_util_replace_whitespace(usb_vendor, vendor_str, sizeof(vendor_str)-1);
udev_util_replace_chars(vendor_str, NULL);
}
@@ -319,6 +324,7 @@ fallback:
dbg(udev, "No USB model information available\n");
return 1;
}
+ udev_util_encode_string(usb_model, model_str_enc, sizeof(model_str_enc));
udev_util_replace_whitespace(usb_model, model_str, sizeof(model_str)-1);
udev_util_replace_chars(model_str, NULL);
}
@@ -439,7 +445,9 @@ int main(int argc, char **argv)
if (export) {
printf("ID_VENDOR=%s\n", vendor_str);
+ printf("ID_VENDOR_ENC=%s\n", vendor_str_enc);
printf("ID_MODEL=%s\n", model_str);
+ printf("ID_MODEL_ENC=%s\n", model_str_enc);
printf("ID_REVISION=%s\n", revision_str);
printf("ID_SERIAL=%s\n", serial);
if (serial_str[0] != '\0')