chiark / gitweb /
ignore rule with GOTO to a non-existent label
[elogind.git] / udevinfo.c
index 52d409df88c520a5e6ef844027835269569ff353..b9ee17c4f1012651fae6ba36bf1e9e3c8eddce37 100644 (file)
@@ -54,6 +54,8 @@ static void print_all_attributes(const char *devpath, const char *key)
 
                        if (strcmp(dent->d_name, "uevent") == 0)
                                continue;
+                       if (strcmp(dent->d_name, "dev") == 0)
+                               continue;
 
                        strlcpy(filename, path, sizeof(filename));
                        strlcat(filename, "/", sizeof(filename));
@@ -69,7 +71,7 @@ static void print_all_attributes(const char *devpath, const char *key)
                        len = strlcpy(value, attr_value, sizeof(value));
                        if(len >= sizeof(value))
                                len = sizeof(value) - 1;
-                       dbg("attr '%s'='%s'(%zi)", dent->d_name, value, len);
+                       dbg("attr '%s'='%s'(%zi)\n", dent->d_name, value, len);
 
                        /* remove trailing newlines */
                        while (len && value[len-1] == '\n')
@@ -79,7 +81,7 @@ static void print_all_attributes(const char *devpath, const char *key)
                        while (len && isprint(value[len-1]))
                                len--;
                        if (len) {
-                               dbg("attribute value of '%s' non-printable, skip", dent->d_name);
+                               dbg("attribute value of '%s' non-printable, skip\n", dent->d_name);
                                continue;
                        }
 
@@ -175,7 +177,7 @@ static int lookup_device_by_name(struct udevice *udev, const char *name)
        if (count <= 0)
                goto out;
 
-       info("found %i devices for '%s'", count, name);
+       info("found %i devices for '%s'\n", count, name);
 
        /* select the device that seems to match */
        list_for_each_entry(device, &name_list, node) {
@@ -185,7 +187,7 @@ static int lookup_device_by_name(struct udevice *udev, const char *name)
                udev_device_init(udev);
                if (udev_db_get_device(udev, device->name) != 0)
                        continue;
-               info("found db entry '%s'", device->name);
+               info("found db entry '%s'\n", device->name);
 
                /* make sure, we don't get a link of a differnt device */
                strlcpy(filename, udev_root, sizeof(filename));
@@ -194,7 +196,7 @@ static int lookup_device_by_name(struct udevice *udev, const char *name)
                if (stat(filename, &statbuf) != 0)
                        continue;
                if (major(udev->devt) > 0 && udev->devt != statbuf.st_rdev) {
-                       info("skip '%s', dev_t doesn't match", udev->name);
+                       info("skip '%s', dev_t doesn't match\n", udev->name);
                        continue;
                }
                rc = 0;
@@ -205,14 +207,22 @@ out:
        return rc;
 }
 
-static int stat_device(const char *name)
+static int stat_device(const char *name, int export, const char *prefix)
 {
        struct stat statbuf;
 
        if (stat(name, &statbuf) != 0)
                return -1;
 
-       printf("%d %d\n", major(statbuf.st_dev), minor(statbuf.st_dev));
+       if (export) {
+               if (prefix == NULL)
+                       prefix = "INFO_";
+               printf("%sMAJOR=%d\n"
+                      "%sMINOR=%d\n",
+                      prefix, major(statbuf.st_dev),
+                      prefix, minor(statbuf.st_dev));
+       } else
+               printf("%d %d\n", major(statbuf.st_dev), minor(statbuf.st_dev));
        return 0;
 }
 
@@ -221,6 +231,8 @@ int udevinfo(int argc, char *argv[], char *envp[])
        int option;
        struct udevice *udev;
        int root = 0;
+       int export = 0;
+       const char *export_prefix = NULL;
 
        static const struct option options[] = {
                { "name", 1, NULL, 'n' },
@@ -230,6 +242,8 @@ int udevinfo(int argc, char *argv[], char *envp[])
                { "export-db", 0, NULL, 'e' },
                { "root", 0, NULL, 'r' },
                { "device-id-of-file", 1, NULL, 'd' },
+               { "export", 0, NULL, 'x' },
+               { "export-prefix", 1, NULL, 'P' },
                { "version", 0, NULL, 1 }, /* -V outputs braindead format */
                { "help", 0, NULL, 'h' },
                {}
@@ -268,11 +282,11 @@ int udevinfo(int argc, char *argv[], char *envp[])
        }
 
        while (1) {
-               option = getopt_long(argc, argv, "aed:n:p:q:rVh", options, NULL);
+               option = getopt_long(argc, argv, "aed:n:p:q:rxPVh", options, NULL);
                if (option == -1)
                        break;
 
-               dbg("option '%c'", option);
+               dbg("option '%c'\n", option);
                switch (option) {
                case 'n':
                        /* remove /dev if given */
@@ -281,7 +295,7 @@ int udevinfo(int argc, char *argv[], char *envp[])
                        else
                                strlcpy(name, optarg, sizeof(name));
                        remove_trailing_chars(name, '/');
-                       dbg("name: %s", name);
+                       dbg("name: %s\n", name);
                        break;
                case 'p':
                        /* remove /sys if given */
@@ -310,7 +324,7 @@ int udevinfo(int argc, char *argv[], char *envp[])
                                        }
                                }
                        }
-                       dbg("path: %s", path);
+                       dbg("path: %s\n", path);
                        break;
                case 'q':
                        action = ACTION_QUERY;
@@ -352,6 +366,12 @@ int udevinfo(int argc, char *argv[], char *envp[])
                case 'e':
                        export_db();
                        goto exit;
+               case 'x':
+                       export = 1;
+                       break;
+               case 'P':
+                       export_prefix = optarg;
+                       break;
                case 1:
                        printf("%s\n", UDEV_VERSION);
                        goto exit;
@@ -460,7 +480,7 @@ int udevinfo(int argc, char *argv[], char *envp[])
                }
                break;
        case ACTION_DEVICE_ID_FILE:
-               if (stat_device(name) != 0)
+               if (stat_device(name, export, export_prefix) != 0)
                        rc = 6;
                break;
        case ACTION_ROOT: