X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev%2Fudevadm-info.c;h=745b4fdb7b9aad3f94194c7df4485896ec4bcae6;hp=0a774b057f83a694c66e69c108750a1f907d1b2d;hb=50025605e0f9942da513c9dcfde289495afefd17;hpb=438d4c3cd4b89381348f84ef9f8b8937814f8362 diff --git a/udev/udevadm-info.c b/udev/udevadm-info.c index 0a774b057..745b4fdb7 100644 --- a/udev/udevadm-info.c +++ b/udev/udevadm-info.c @@ -32,6 +32,7 @@ static void print_all_attributes(struct udev_device *device, const char *key) { + struct udev *udev = udev_device_get_udev(device); DIR *dir; struct dirent *dent; @@ -59,7 +60,7 @@ static void print_all_attributes(struct udev_device *device, const char *key) if (S_ISLNK(statbuf.st_mode)) continue; - value = udev_device_get_attr_value(device, dent->d_name); + value = udev_device_get_sysattr_value(device, dent->d_name); if (value == NULL) continue; dbg(udev, "attr '%s'='%s'(%zi)\n", dent->d_name, value, len); @@ -69,7 +70,7 @@ static void print_all_attributes(struct udev_device *device, const char *key) while (len > 0 && isprint(value[len-1])) len--; if (len > 0) { - dbg(info, "attribute value of '%s' non-printable, skip\n", dent->d_name); + dbg(udev, "attribute value of '%s' non-printable, skip\n", dent->d_name); continue; } @@ -129,23 +130,26 @@ static int print_device_chain(struct udev_device *device) static void print_record(struct udev_device *device) { size_t len; + const char *str; int i; struct udev_list_entry *list_entry; printf("P: %s\n", udev_device_get_devpath(device)); len = strlen(udev_get_dev_path(udev_device_get_udev(device))); - printf("N: %s\n", &udev_device_get_devnode(device)[len+1]); + str = udev_device_get_devnode(device); + if (str != NULL) + printf("N: %s\n", &str[len+1]); - i = device_get_devlink_priority(device); + i = udev_device_get_devlink_priority(device); if (i != 0) printf("L: %i\n", i); - i = device_get_num_fake_partitions(device); + i = udev_device_get_num_fake_partitions(device); if (i != 0) printf("A:%u\n", i); - i = device_get_ignore_remove(device); + i = udev_device_get_ignore_remove(device); if (i != 0) printf("R:%u\n", i); @@ -158,7 +162,6 @@ static void print_record(struct udev_device *device) printf("E: %s=%s\n", udev_list_entry_get_name(list_entry), udev_list_entry_get_value(list_entry)); - printf("\n"); } @@ -189,7 +192,7 @@ static int export_devices(struct udev *udev) udev_enumerate = udev_enumerate_new(udev); if (udev_enumerate == NULL) return -1; - udev_enumerate_scan_devices(udev_enumerate, NULL); + udev_enumerate_scan_devices(udev_enumerate); udev_list_entry_foreach(list_entry, udev_enumerate_get_list_entry(udev_enumerate)) { struct udev_device *device; @@ -216,17 +219,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, 'V' }, + { "help", no_argument, NULL, 'h' }, {} }; @@ -340,7 +343,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) @@ -363,11 +366,8 @@ int udevadm_info(struct udev *udev, int argc, char *argv[]) case 'P': export_prefix = optarg; break; - case 1: - printf("%s\n", VERSION); - goto exit; case 'V': - printf("udevinfo, version %s\n", VERSION); + printf("%s\n", VERSION); goto exit; case 'h': printf("Usage: udevadm info OPTIONS\n" @@ -406,9 +406,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: @@ -449,14 +456,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));