chiark / gitweb /
libudev: device - add get_parent_with_subsystem()
[elogind.git] / udev / udevadm-info.c
index c2ff0bbea3c135a9add01ecb333b263a5eedde9a..ec098abd187a102d3f0874dd23e96484b2fb9fb4 100644 (file)
@@ -217,17 +217,17 @@ int udevadm_info(struct udev *udev, int argc, char *argv[])
        int rc = 0;
 
        static const struct option options[] = {
-               { "name", 1, NULL, 'n' },
-               { "path", 1, NULL, 'p' },
-               { "query", 1, NULL, 'q' },
-               { "attribute-walk", 0, NULL, 'a' },
-               { "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' },
+               { "name", required_argument, NULL, 'n' },
+               { "path", required_argument, NULL, 'p' },
+               { "query", required_argument, NULL, 'q' },
+               { "attribute-walk", no_argument, NULL, 'a' },
+               { "export-db", no_argument, NULL, 'e' },
+               { "root", no_argument, NULL, 'r' },
+               { "device-id-of-file", required_argument, NULL, 'd' },
+               { "export", no_argument, NULL, 'x' },
+               { "export-prefix", required_argument, NULL, 'P' },
+               { "version", no_argument, NULL, 1 }, /* -V outputs braindead format */
+               { "help", no_argument, NULL, 'h' },
                {}
        };
 
@@ -341,7 +341,7 @@ int udevadm_info(struct udev *udev, int argc, char *argv[])
                                break;
                        }
                        fprintf(stderr, "unknown query type\n");
-                       rc = 2;
+                       rc = 3;
                        goto exit;
                case 'r':
                        if (action == ACTION_NONE)
@@ -407,9 +407,16 @@ int udevadm_info(struct udev *udev, int argc, char *argv[])
                                printf("%s\n", udev_device_get_devnode(device));
                        } else {
                                size_t len;
+                               const char *node;
 
                                len = strlen(udev_get_dev_path(udev));
-                               printf("%s\n", &udev_device_get_devnode(device)[len+1]);
+                               node = udev_device_get_devnode(device);
+                               if (node == NULL) {
+                                       fprintf(stderr, "no device node found\n");
+                                       rc = 5;
+                                       goto exit;
+                               }
+                                       printf("%s\n", &udev_device_get_devnode(device)[len+1]);
                        }
                        break;
                case QUERY_SYMLINK:
@@ -450,14 +457,14 @@ int udevadm_info(struct udev *udev, int argc, char *argv[])
        case ACTION_ATTRIBUTE_WALK:
                if (device == NULL) {
                        fprintf(stderr, "query needs a valid device specified by --path= or --name=\n");
-                       rc = 5;
+                       rc = 4;
                        goto exit;
                }
                print_device_chain(device);
                break;
        case ACTION_DEVICE_ID_FILE:
                if (stat_device(name, export, export_prefix) != 0)
-                       rc = 6;
+                       rc = 1;
                break;
        case ACTION_ROOT:
                printf("%s\n", udev_get_dev_path(udev));