chiark / gitweb /
tabs are as useful as a hole in the head
[elogind.git] / src / udev-builtin-hwdb.c
index b6af4b6fcf3ee3436db8a3cf45cfba5878ef5f80..aa996f375d961ff46c8ebbe565fcd91bfb3342fa 100644 (file)
 #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,
 };