chiark / gitweb /
firmware: remove hardcoded path to logger
[elogind.git] / extras / ata_id / ata_id.c
index aedebff711a2494a52f3273d968dea00ccd13e3a..f94cdc0fd315abeb8298571e932932ff4ce5f3bb 100644 (file)
@@ -19,6 +19,7 @@
 #include <ctype.h>
 #include <string.h>
 #include <errno.h>
+#include <getopt.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -91,22 +92,40 @@ int main(int argc, char *argv[])
        char serial[21];
        char revision[9];
        const char *node = NULL;
-       int i;
        int export = 0;
        int fd;
        int rc = 0;
+       static const struct option options[] = {
+               { "export", 0, NULL, 'x' },
+               { "help", 0, NULL, 'h' },
+               {}
+       };
 
        logging_init("ata_id");
 
-       for (i = 1 ; i < argc; i++) {
-               char *arg = argv[i];
+       while (1) {
+               int option;
 
-               if (strcmp(arg, "--export") == 0) {
+               option = getopt_long(argc, argv, "xh", options, NULL);
+               if (option == -1)
+                       break;
+
+               switch (option) {
+               case 'x':
                        export = 1;
-               } else
-                       node = arg;
+                       break;
+               case 'h':
+                       printf("Usage: ata_id [--export] [--help] <device>\n"
+                              "  --export    print values as environemt keys\n"
+                              "  --help      print this help text\n\n");
+               default:
+                       rc = 1;
+                       goto exit;
+               }
        }
-       if (!node) {
+
+       node = argv[optind];
+       if (node == NULL) {
                err("no node specified");
                rc = 1;
                goto exit;
@@ -120,8 +139,13 @@ int main(int argc, char *argv[])
        }
 
        if (ioctl(fd, HDIO_GET_IDENTITY, &id)) {
-               err("HDIO_GET_IDENTITY failed for '%s'", node);
-               rc = 3;
+               if (errno == ENOTTY) {
+                       info("HDIO_GET_IDENTITY unsupported for '%s'", node);
+                       rc = 2;
+               } else {
+                       err("HDIO_GET_IDENTITY failed for '%s'", node);
+                       rc = 3;
+               }
                goto close;
        }