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' },
{}
};
break;
}
fprintf(stderr, "unknown query type\n");
- rc = 2;
+ rc = 3;
goto exit;
case 'r':
if (action == ACTION_NONE)
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:
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));