X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udevinfo.c;h=af2346c8f566e8e9fad54868a98ec0e2446cff28;hp=3361837a37a98200abde68964df9312079fff6b0;hb=52a6ef66f2e98491b40b176619035abca3777a2c;hpb=d00bd1724bd9f75f5a7b8e0368428c2f0d6d3c26 diff --git a/udevinfo.c b/udevinfo.c index 3361837a3..af2346c8f 100644 --- a/udevinfo.c +++ b/udevinfo.c @@ -30,6 +30,7 @@ #include "libsysfs/sysfs/libsysfs.h" #include "libsysfs/dlist.h" #include "udev.h" +#include "udev_lib.h" #include "udev_version.h" #include "logging.h" #include "udevdb.h" @@ -103,14 +104,18 @@ exit: } /* callback for database dump */ -static int print_record(char *path, struct udevice *dev) +static int print_record(const char *path, struct udevice *dev) { printf("P: %s\n", path); printf("N: %s\n", dev->name); + printf("T: %c\n", dev->type); printf("M: %#o\n", dev->mode); printf("S: %s\n", dev->symlink); printf("O: %s\n", dev->owner); printf("G: %s\n", dev->group); + printf("F: %s\n", dev->config_file); + printf("L: %i\n", dev->config_line); + printf("U: %li\n", dev->config_uptime); printf("\n"); return 0; } @@ -134,6 +139,10 @@ static int print_device_chain(const char *path) struct sysfs_device *sysfs_dev; struct sysfs_device *sysfs_dev_parent; int retval = 0; + char type; + + type = get_device_type(path, ""); + dbg("device type is %c", type); /* get the class dev */ class_dev = sysfs_open_class_device_path(path); @@ -142,22 +151,23 @@ static int print_device_chain(const char *path) return -1; } - /* read the 'dev' file for major/minor*/ - attr = sysfs_get_classdev_attr(class_dev, "dev"); - if (attr == NULL) { - printf("couldn't get the \"dev\" file\n"); - retval = -1; - goto exit; - } - printf("\nudevinfo starts with the device the node belongs to and then walks up the\n" - "device chain to print for every device found all possibly useful attributes\n" + "device chain, to print for every device found, all possibly useful attributes\n" "in the udev key format.\n" - "Only attributes within one device section may be used in a rule to match the\n" - "device for which the node will be created.\n" + "Only attributes within one device section may be used together in one rule,\n" + "to match the device for which the node will be created.\n" "\n"); - printf("device '%s' has major:minor %s", class_dev->path, attr->value); - sysfs_close_attribute(attr); + + if (type == 'b' || type =='c') { + /* read the 'dev' file for major/minor*/ + attr = sysfs_get_classdev_attr(class_dev, "dev"); + if (attr == NULL) { + printf("couldn't get the \"dev\" file\n"); + retval = -1; + goto exit; + } + printf("device '%s' has major:minor %s", class_dev->path, attr->value); + } /* open sysfs class device directory and print all attributes */ printf(" looking at class device '%s':\n", class_dev->path); @@ -169,11 +179,11 @@ static int print_device_chain(const char *path) /* get the device link (if parent exists look here) */ class_dev_parent = sysfs_get_classdev_parent(class_dev); - if (class_dev_parent != NULL) { - //sysfs_close_class_device(class_dev); - class_dev = class_dev_parent; - } - sysfs_dev = sysfs_get_classdev_device(class_dev); + if (class_dev_parent != NULL) + sysfs_dev = sysfs_get_classdev_device(class_dev_parent); + else + sysfs_dev = sysfs_get_classdev_device(class_dev); + if (sysfs_dev != NULL) printf("follow the class device's \"device\"\n"); @@ -190,13 +200,11 @@ static int print_device_chain(const char *path) if (sysfs_dev_parent == NULL) break; - //sysfs_close_device(sysfs_dev); sysfs_dev = sysfs_dev_parent; } - sysfs_close_device(sysfs_dev); exit: - //sysfs_close_class_device(class_dev); + sysfs_close_class_device(class_dev); return retval; } @@ -439,18 +447,18 @@ help: int main(int argc, char *argv[], char *envp[]) { - int retval; + int rc = 0; main_argv = argv; main_argc = argc; - init_logging("udevinfo"); + logging_init("udevinfo"); /* initialize our configuration */ udev_init_config(); - retval = process_options(); - if (retval != 0) - exit(1); - exit(0); + rc = process_options(); + + logging_close(); + exit(rc); }