chiark / gitweb /
udevtest: print header that ENV{} can't work
[elogind.git] / udevinfo.c
index 1a10f9ad073c80f2b58c74717edc70702c0c7da0..3146a96119e73826550b528f8061b12aacec4770 100644 (file)
@@ -1,7 +1,5 @@
 /*
- * udevinfo.c - fetches stored device information or sysfs attributes
- *
- * Copyright (C) 2004-2005 Kay Sievers <kay.sievers@vrfy.org>
+ * Copyright (C) 2004-2006 Kay Sievers <kay.sievers@vrfy.org>
  *
  *     This program is free software; you can redistribute it and/or modify it
  *     under the terms of the GNU General Public License as published by the
@@ -14,7 +12,7 @@
  * 
  *     You should have received a copy of the GNU General Public License along
  *     with this program; if not, write to the Free Software Foundation, Inc.,
- *     675 Mass Ave, Cambridge, MA 02139, USA.
+ *     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  *
  */
 
@@ -45,7 +43,7 @@ void log_message (int priority, const char *format, ...)
 }
 #endif
 
-static void print_all_attributes(const char *devpath)
+static void print_all_attributes(const char *devpath, const char *key)
 {
        char path[PATH_SIZE];
        DIR *dir;
@@ -80,7 +78,7 @@ static void print_all_attributes(const char *devpath)
                        }
 
                        replace_untrusted_chars(value);
-                       printf("    SYSFS{%s}==\"%s\"\n", dent->d_name, value);
+                       printf("    %s{%s}==\"%s\"\n", key, dent->d_name, value);
                }
        }
        printf("\n");
@@ -103,10 +101,10 @@ static int print_device_chain(const char *devpath)
                return -1;
 
        printf("  looking at device '%s':\n", dev->devpath);
-       printf("    KERNEL==\"%s\"\n", dev->kernel_name);
+       printf("    KERNEL==\"%s\"\n", dev->kernel);
        printf("    SUBSYSTEM==\"%s\"\n", dev->subsystem);
        printf("    DRIVER==\"%s\"\n", dev->driver);
-       print_all_attributes(dev->devpath);
+       print_all_attributes(dev->devpath, "ATTR");
 
        /* walk up the chain of devices */
        while (1) {
@@ -114,11 +112,11 @@ static int print_device_chain(const char *devpath)
                if (dev == NULL)
                        break;
                printf("  looking at parent device '%s':\n", dev->devpath);
-               printf("    ID==\"%s\"\n", dev->kernel_name);
-               printf("    BUS==\"%s\"\n", dev->subsystem);
-               printf("    DRIVER==\"%s\"\n", dev->driver);
+               printf("    KERNELS==\"%s\"\n", dev->kernel);
+               printf("    SUBSYTEMS==\"%s\"\n", dev->subsystem);
+               printf("    DRIVERS==\"%s\"\n", dev->driver);
 
-               print_all_attributes(dev->devpath);
+               print_all_attributes(dev->devpath, "ATTRS");
        }
 
        return 0;
@@ -163,30 +161,8 @@ static void export_db(void fnct(struct udevice *udev)) {
        name_list_cleanup(&name_list);
 }
 
-static void print_help(void)
-{
-       fprintf(stderr, "Usage: udevinfo [-anpqrVh]\n"
-              "  -q TYPE  query database for the specified value:\n"
-              "             'name'    name of device node\n"
-              "             'symlink' pointing to node\n"
-              "             'path'    sysfs device path\n"
-              "             'env'     the device related imported environment\n"
-              "             'all'     all values\n"
-              "\n"
-              "  -p PATH  sysfs device path used for query or chain\n"
-              "  -n NAME  node/symlink name used for query\n"
-              "\n"
-              "  -r       prepend to query result or print udev_root\n"
-              "  -a       print all SYSFS_attributes along the device chain\n"
-              "  -e       export the content of the udev database\n"
-              "  -V       print udev version\n"
-              "  -h       print this help text\n"
-              "\n");
-}
-
 int main(int argc, char *argv[], char *envp[])
 {
-       static const char short_options[] = "aden:p:q:rVh";
        int option;
        struct udevice *udev;
        int root = 0;
@@ -213,7 +189,6 @@ int main(int argc, char *argv[], char *envp[])
        int rc = 0;
 
        logging_init("udevinfo");
-
        udev_config_init();
        sysfs_init();
 
@@ -224,8 +199,9 @@ int main(int argc, char *argv[], char *envp[])
        }
 
        /* get command line options */
+       opterr = 0;
        while (1) {
-               option = getopt(argc, argv, short_options);
+               option = getopt(argc, argv, ":aden:p:q:rVh");
                if (option == -1)
                        break;
 
@@ -291,9 +267,30 @@ int main(int argc, char *argv[], char *envp[])
                        printf("udevinfo, version %s\n", UDEV_VERSION);
                        goto exit;
                case 'h':
+                       printf("Usage: udevinfo [-anpqrVh]\n"
+                              "  -q TYPE  query database for the specified value:\n"
+                              "             'name'    name of device node\n"
+                              "             'symlink' pointing to node\n"
+                              "             'path'    sysfs device path\n"
+                              "             'env'     the device related imported environment\n"
+                              "             'all'     all values\n"
+                              "\n"
+                              "  -p PATH  sysfs device path used for query or chain\n"
+                              "  -n NAME  node/symlink name used for query\n"
+                              "\n"
+                              "  -r       prepend to query result or print udev_root\n"
+                              "  -a       print all SYSFS_attributes along the device chain\n"
+                              "  -e       export the content of the udev database\n"
+                              "  -V       print udev version\n"
+                              "  -h       print this help text\n"
+                              "\n");
+                       goto exit;
+               case ':':
+                       fprintf(stderr, "missing argument for '%c'\n", optopt);
+                       goto exit;
                case '?':
                default:
-                       print_help();
+                       fprintf(stderr, "unrecognized option '%c'\n", optopt);
                        goto exit;
                }
        }
@@ -352,7 +349,7 @@ int main(int argc, char *argv[], char *envp[])
                        print_record(udev);
                        break;
                default:
-                       print_help();
+                       fprintf(stderr, "unknown query type\n");
                        break;
                }
                break;
@@ -378,7 +375,7 @@ int main(int argc, char *argv[], char *envp[])
                printf("%s\n", udev_root);
                break;
        default:
-               print_help();
+               fprintf(stderr, "missing option\n");
                rc = 1;
                break;
        }