summaryrefslogtreecommitdiff
path: root/src/udev-builtin-hwdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/udev-builtin-hwdb.c')
-rw-r--r--src/udev-builtin-hwdb.c286
1 files changed, 143 insertions, 143 deletions
diff --git a/src/udev-builtin-hwdb.c b/src/udev-builtin-hwdb.c
index b6af4b6fcf..aa996f375d 100644
--- a/src/udev-builtin-hwdb.c
+++ b/src/udev-builtin-hwdb.c
@@ -28,220 +28,220 @@
#include "udev.h"
static int get_id_attr(
- struct udev_device *parent,
- const char *name,
- uint16_t *value) {
+ struct udev_device *parent,
+ const char *name,
+ uint16_t *value) {
- const char *t;
- unsigned u;
+ const char *t;
+ unsigned u;
- if (!(t = udev_device_get_sysattr_value(parent, name))) {
- fprintf(stderr, "%s lacks %s.\n", udev_device_get_syspath(parent), name);
- return -1;
- }
+ if (!(t = udev_device_get_sysattr_value(parent, name))) {
+ fprintf(stderr, "%s lacks %s.\n", udev_device_get_syspath(parent), name);
+ return -1;
+ }
- if (!strncmp(t, "0x", 2))
- t += 2;
+ if (!strncmp(t, "0x", 2))
+ t += 2;
- if (sscanf(t, "%04x", &u) != 1 || u > 0xFFFFU) {
- fprintf(stderr, "Failed to parse %s on %s.\n", name, udev_device_get_syspath(parent));
- return -1;
- }
+ if (sscanf(t, "%04x", &u) != 1 || u > 0xFFFFU) {
+ fprintf(stderr, "Failed to parse %s on %s.\n", name, udev_device_get_syspath(parent));
+ return -1;
+ }
- *value = (uint16_t) u;
- return 0;
+ *value = (uint16_t) u;
+ return 0;
}
static int get_vid_pid(
- struct udev_device *parent,
- const char *vendor_attr,
- const char *product_attr,
- uint16_t *vid,
- uint16_t *pid) {
-
- if (get_id_attr(parent, vendor_attr, vid) < 0)
- return -1;
- else if (*vid <= 0) {
- fprintf(stderr, "Invalid vendor id.\n");
- return -1;
- }
-
- if (get_id_attr(parent, product_attr, pid) < 0)
- return -1;
-
- return 0;
+ struct udev_device *parent,
+ const char *vendor_attr,
+ const char *product_attr,
+ uint16_t *vid,
+ uint16_t *pid) {
+
+ if (get_id_attr(parent, vendor_attr, vid) < 0)
+ return -1;
+ else if (*vid <= 0) {
+ fprintf(stderr, "Invalid vendor id.\n");
+ return -1;
+ }
+
+ if (get_id_attr(parent, product_attr, pid) < 0)
+ return -1;
+
+ return 0;
}
static void rstrip(char *n) {
- size_t i;
+ size_t i;
- for (i = strlen(n); i > 0 && isspace(n[i-1]); i--)
- n[i-1] = 0;
+ for (i = strlen(n); i > 0 && isspace(n[i-1]); i--)
+ n[i-1] = 0;
}
#define HEXCHARS "0123456789abcdefABCDEF"
#define WHITESPACE " \t\n\r"
static int lookup_vid_pid(const char *database,
- uint16_t vid, uint16_t pid,
- char **vendor, char **product)
+ uint16_t vid, uint16_t pid,
+ char **vendor, char **product)
{
- FILE *f;
- int ret = -1;
- int found_vendor = 0;
- char *line = NULL;
+ FILE *f;
+ int ret = -1;
+ int found_vendor = 0;
+ char *line = NULL;
- *vendor = *product = NULL;
+ *vendor = *product = NULL;
- if (!(f = fopen(database, "rme"))) {
- fprintf(stderr, "Failed to open database file '%s': %s\n", database, strerror(errno));
- return -1;
- }
+ if (!(f = fopen(database, "rme"))) {
+ fprintf(stderr, "Failed to open database file '%s': %s\n", database, strerror(errno));
+ return -1;
+ }
- for (;;) {
- size_t n;
+ for (;;) {
+ size_t n;
- if (getline(&line, &n, f) < 0)
- break;
+ if (getline(&line, &n, f) < 0)
+ break;
- rstrip(line);
+ rstrip(line);
- if (line[0] == '#' || line[0] == 0)
- continue;
+ if (line[0] == '#' || line[0] == 0)
+ continue;
- if (strspn(line, HEXCHARS) == 4) {
- unsigned u;
+ if (strspn(line, HEXCHARS) == 4) {
+ unsigned u;
- if (found_vendor)
- break;
+ if (found_vendor)
+ break;
- if (sscanf(line, "%04x", &u) == 1 && u == vid) {
- char *t;
+ if (sscanf(line, "%04x", &u) == 1 && u == vid) {
+ char *t;
- t = line+4;
- t += strspn(t, WHITESPACE);
+ t = line+4;
+ t += strspn(t, WHITESPACE);
- if (!(*vendor = strdup(t))) {
- fprintf(stderr, "Out of memory.\n");
- goto finish;
- }
+ if (!(*vendor = strdup(t))) {
+ fprintf(stderr, "Out of memory.\n");
+ goto finish;
+ }
- found_vendor = 1;
- }
+ found_vendor = 1;
+ }
- continue;
- }
+ continue;
+ }
- if (found_vendor && line[0] == '\t' && strspn(line+1, HEXCHARS) == 4) {
- unsigned u;
+ if (found_vendor && line[0] == '\t' && strspn(line+1, HEXCHARS) == 4) {
+ unsigned u;
- if (sscanf(line+1, "%04x", &u) == 1 && u == pid) {
- char *t;
+ if (sscanf(line+1, "%04x", &u) == 1 && u == pid) {
+ char *t;
- t = line+5;
- t += strspn(t, WHITESPACE);
+ t = line+5;
+ t += strspn(t, WHITESPACE);
- if (!(*product = strdup(t))) {
- fprintf(stderr, "Out of memory.\n");
- goto finish;
- }
+ if (!(*product = strdup(t))) {
+ fprintf(stderr, "Out of memory.\n");
+ goto finish;
+ }
- break;
- }
- }
- }
+ break;
+ }
+ }
+ }
- ret = 0;
+ ret = 0;
finish:
- free(line);
- fclose(f);
+ free(line);
+ fclose(f);
- if (ret < 0) {
- free(*product);
- free(*vendor);
+ if (ret < 0) {
+ free(*product);
+ free(*vendor);
- *product = *vendor = NULL;
- }
+ *product = *vendor = NULL;
+ }
- return ret;
+ return ret;
}
static struct udev_device *find_device(struct udev_device *dev, const char *subsys, const char *devtype)
{
- const char *str;
-
- str = udev_device_get_subsystem(dev);
- if (str == NULL)
- goto try_parent;
- if (strcmp(str, subsys) != 0)
- goto try_parent;
-
- if (devtype != NULL) {
- str = udev_device_get_devtype(dev);
- if (str == NULL)
- goto try_parent;
- if (strcmp(str, devtype) != 0)
- goto try_parent;
- }
- return dev;
+ const char *str;
+
+ str = udev_device_get_subsystem(dev);
+ if (str == NULL)
+ goto try_parent;
+ if (strcmp(str, subsys) != 0)
+ goto try_parent;
+
+ if (devtype != NULL) {
+ str = udev_device_get_devtype(dev);
+ if (str == NULL)
+ goto try_parent;
+ if (strcmp(str, devtype) != 0)
+ goto try_parent;
+ }
+ return dev;
try_parent:
- return udev_device_get_parent_with_subsystem_devtype(dev, subsys, devtype);
+ return udev_device_get_parent_with_subsystem_devtype(dev, subsys, devtype);
}
static int builtin_db(struct udev_device *dev, bool test,
- const char *database,
- const char *vendor_attr, const char *product_attr,
- const char *subsys, const char *devtype)
+ const char *database,
+ const char *vendor_attr, const char *product_attr,
+ const char *subsys, const char *devtype)
{
- struct udev_device *parent;
- uint16_t vid = 0, pid = 0;
- char *vendor = NULL, *product = NULL;
+ struct udev_device *parent;
+ uint16_t vid = 0, pid = 0;
+ char *vendor = NULL, *product = NULL;
- parent = find_device(dev, subsys, devtype);
- if (!parent) {
- fprintf(stderr, "Failed to find device.\n");
- goto finish;
- }
+ parent = find_device(dev, subsys, devtype);
+ if (!parent) {
+ fprintf(stderr, "Failed to find device.\n");
+ goto finish;
+ }
- if (get_vid_pid(parent, vendor_attr, product_attr, &vid, &pid) < 0)
- goto finish;
+ if (get_vid_pid(parent, vendor_attr, product_attr, &vid, &pid) < 0)
+ goto finish;
- if (lookup_vid_pid(database, vid, pid, &vendor, &product) < 0)
- goto finish;
+ if (lookup_vid_pid(database, vid, pid, &vendor, &product) < 0)
+ goto finish;
- if (vendor)
- udev_builtin_add_property(dev, test, "ID_VENDOR_FROM_DATABASE", vendor);
- if (product)
- udev_builtin_add_property(dev, test, "ID_MODEL_FROM_DATABASE", product);
+ if (vendor)
+ udev_builtin_add_property(dev, test, "ID_VENDOR_FROM_DATABASE", vendor);
+ if (product)
+ udev_builtin_add_property(dev, test, "ID_MODEL_FROM_DATABASE", product);
finish:
- free(vendor);
- free(product);
- return 0;
+ free(vendor);
+ free(product);
+ return 0;
}
static int builtin_usb_db(struct udev_device *dev, int argc, char *argv[], bool test)
{
- return builtin_db(dev, test, USB_DATABASE, "idVendor", "idProduct", "usb", "usb_device");
+ return builtin_db(dev, test, USB_DATABASE, "idVendor", "idProduct", "usb", "usb_device");
}
static int builtin_pci_db(struct udev_device *dev, int argc, char *argv[], bool test)
{
- return builtin_db(dev, test, PCI_DATABASE, "vendor", "device", "pci", NULL);
+ return builtin_db(dev, test, PCI_DATABASE, "vendor", "device", "pci", NULL);
}
const struct udev_builtin udev_builtin_usb_db = {
- .name = "usb-db",
- .cmd = builtin_usb_db,
- .help = "USB vendor/product database",
- .run_once = true,
+ .name = "usb-db",
+ .cmd = builtin_usb_db,
+ .help = "USB vendor/product database",
+ .run_once = true,
};
const struct udev_builtin udev_builtin_pci_db = {
- .name = "pci-db",
- .cmd = builtin_pci_db,
- .help = "PCI vendor/product database",
- .run_once = true,
+ .name = "pci-db",
+ .cmd = builtin_pci_db,
+ .help = "PCI vendor/product database",
+ .run_once = true,
};