chiark / gitweb /
rename udev_volume_id to vol_id and add --export option
authorKay Sievers <kay.sievers@suse.de>
Sat, 25 Jun 2005 23:54:47 +0000 (01:54 +0200)
committerKay Sievers <kay.sievers@suse.de>
Sat, 25 Jun 2005 23:54:47 +0000 (01:54 +0200)
Signed-off-by: Kay Sievers <kay.sievers@suse.de>
extras/ata_id/ata_id.c
extras/volume_id/Makefile
extras/volume_id/README
extras/volume_id/s390-dasd.rules [deleted file]
extras/volume_id/vol_id.c [moved from extras/volume_id/udev_volume_id.c with 63% similarity]

index e26cb6bd2dffb9b3879e404c88334e479a2b650a..59e2b3987b376b6dc58aed5144c0b32d345c393b 100644 (file)
@@ -81,6 +81,7 @@ static void set_str(char *to, const unsigned char *from, int count)
                case '/':
                case ' ':
                        to[j++] = '_';
                case '/':
                case ' ':
                        to[j++] = '_';
+                       break;
                default:
                        to[j++] = from[i];
                }
                default:
                        to[j++] = from[i];
                }
index 56fdf278b98b4bf3bdacc6ef4a97546a6894ca1c..eca9cfdbd4c0b6069b6c1e26854cdfa502c9c8ac 100644 (file)
@@ -1,13 +1,13 @@
-# Makefile for udev_volume_id
+# Makefile for volume_id
 #
 #
-# Copyright (C) 2004 Kay Sievers <kay.sievers@vrfy.org>
+# Copyright (C) 2004, 2005 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 Free Software Foundation; version 2 of the License.
 #
 
 #
 # 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 Free Software Foundation; version 2 of the License.
 #
 
-PROG = udev_volume_id
+PROG = vol_id
 
 all:   $(PROG)
 
 
 all:   $(PROG)
 
@@ -33,7 +33,7 @@ override CFLAGS+=-D_FILE_OFFSET_BITS=64
 VOLUME_ID_BASE=volume_id
 include $(VOLUME_ID_BASE)/Makefile.inc
 
 VOLUME_ID_BASE=volume_id
 include $(VOLUME_ID_BASE)/Makefile.inc
 
-OBJS = udev_volume_id.o $(VOLUME_ID_OBJS) ../../udev.a
+OBJS = vol_id.o $(VOLUME_ID_OBJS) ../../udev.a
 HEADERS = $(VOLUME_ID_HEADERS)
 
 $(OBJS): $(HEADERS)
 HEADERS = $(VOLUME_ID_HEADERS)
 
 $(OBJS): $(HEADERS)
index d570615e10ad58d74e8a80b667606e15c6c4e456..a7635ff612f3cc385f6ae41ea3a72eb516b5e189 100644 (file)
@@ -1,43 +1,73 @@
-
-udev_volume_id - partition, filesystem, disklabel reader
+vol_id - partition, filesystem, disklabel reader
 
 This program is normally called from a udev rule, to provide udev with the
 name, uuid or the filesystem type of a partition to name a device node.
 
 This program is normally called from a udev rule, to provide udev with the
 name, uuid or the filesystem type of a partition to name a device node.
-udev_volume_id opens the blockdevice node specified at the commandline.
-The following commandline switches are supported to specify what udev_volume_id
-should print to stdout:
+vol_id opens the blockdevice node specified at the commandline.
+The following commandline switches are supported to specify what vol_id
+should print:
 
 
-       no option prints all values
-  -h   prints help text
-  -l   prints the label of the partition
-  -u   prints the uuid of the partition
+  --export prints all values
+  -h       prints help text
+  -l       prints the label of the partition
+  -u       prints the uuid of the partition
 
 
-udev_volume_id will only return successful if the string asked for, is not
+vol_id will only return successful if the string asked for, is not
 empty. All trailing whitespace will be removed, spaces replaced by underscore
 and slashes ignored.
 
 empty. All trailing whitespace will be removed, spaces replaced by underscore
 and slashes ignored.
 
+fstype                 probe  label  uuid  fsversion
+----------------------------------------------------
+ext                    *      *      *     *
+reiserfs jr/3.5/3.6/4  *      *      *     *
+fat (12, 16, 32)       *      *      *     *
+ntfs                   *      *      *     *
+jfs                    *      *      *     -
+xfs                    *      *      *     -
+hfs (plus, wrapped)    *      *      *     -
+udf                    *      *      -     -
+iso9660                *      *      n/a   -
+ufs                    *      -      -     -
+linux swap             *      *      *     *
+LVM 1                  *      -      -     -
+LVM 2                  *      -      -     *
+linux raid             *      -      *     *
+cramfs                 *      *      -     -
+sysv                   *      *      -     *
+luks                   *      -      *     -
+hpfs                   *      -      -     -
+romfs                  *
+minix                  *
+dasd                   *
+highpoint              *
+isw_raid               *
+lsi_raid               *
+nvidia_raid            *
+promise_raid           *
+silicon_raid           *
+via_raid               *
+mac partitons          *
+msdos partitions       *
+
+
 The following rule will create a symlink named with the label string:
 The following rule will create a symlink named with the label string:
-  KERNEL="[hs]d*", PROGRAM="/sbin/udev_volume_id -l %N", SYMLINK="%c"
+  KERNEL=="[hs]d*", PROGRAM=="/sbin/vol_id -l %N", SYMLINK+="%c"
 
 
-If no label is found udev_volume_id exits with nonzero and the rule will be
+If no label is found vol_id exits with nonzero and the rule will be
 ignored.
 
 To give it a try, you may call it on the commandline:
 ignored.
 
 To give it a try, you may call it on the commandline:
-
-  [root@pim udev.kay]# extras/volume_id/udev_volume_id /dev/hda3
+  [root@pim udev.kay]# extras/volume_id/vol_id /dev/hda3
   T:ext3
   L:Music Store
   N:Music_Store
   U:d2da42b5-bbd9-44eb-a72c-cc4542fcb71e
 
   T:ext3
   L:Music Store
   N:Music_Store
   U:d2da42b5-bbd9-44eb-a72c-cc4542fcb71e
 
-  [root@pim udev.kay]# extras/volume_id/udev_volume_id -l /dev/hda3
+  [root@pim udev.kay]# extras/volume_id/vol_id -l /dev/hda3
   Music_Store
 
   Music_Store
 
-  [root@pim udev.kay]# extras/volume_id/udev_volume_id -t /dev/hda3
+  [root@pim udev.kay]# extras/volume_id/vol_id -t /dev/hda3
   swap
 
 
   swap
 
 
-Please send any comment/questions/concerns to me or:
-       linux-hotplug-devel@lists.sourceforge.net
-
+Any comment/questions/concerns to me:
 Kay Sievers <kay.sievers@vrfy.org>
 Kay Sievers <kay.sievers@vrfy.org>
diff --git a/extras/volume_id/s390-dasd.rules b/extras/volume_id/s390-dasd.rules
deleted file mode 100644 (file)
index a870d87..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# s390 block devices named by disk label
-KERNEL="dasd*[a-z]", PROGRAM="/sbin/udev_volume_id -d -l" RESULT="[0-9A-Z]*", SYMLINK="dasd/%c/disc dasd/%b/disc"
-KERNEL="dasd*[0-9]", PROGRAM="/sbin/udev_volume_id -d -l" RESULT="[0-9A-Z]*", SYMLINK="dasd/%c/part%n dasd/%b/part%n"
-KERNEL="dasd*[a-z]", SYMLINK="dasd/%b/disc"
-KERNEL="dasd*[0-9]", SYMLINK="dasd/%b/part%n"
-KERNEL="dcssblk*", NAME="%k", SYMLINK="dcssblk/%b"
-
similarity index 63%
rename from extras/volume_id/udev_volume_id.c
rename to extras/volume_id/vol_id.c
index 7c6fc4050d6fb70ec5cd76d2c3257d6f911a124e..3048fd8062c1c43fa4129bac65f8fe1198d66f87 100644 (file)
@@ -64,60 +64,83 @@ void log_message(int priority, const char *format, ...)
 }
 #endif
 
 }
 #endif
 
-extern int optind;
+static void set_str(char *to, const unsigned char *from, int count)
+{
+       int i, j;
+       int len;
+
+       len = strnlen(from, count);
+       while (isspace(from[len-1]))
+               len--;
+
+       i = 0;
+       while (isspace(from[i]) && (i < len))
+               i++;
+
+       j = 0;
+       while (i < len) {
+               switch(from[i]) {
+               case '/':
+                       break;
+               case ' ':
+                       to[j++] = '_';
+                       break;
+               default:
+                       to[j++] = from[i];
+               }
+               i++;
+       }
+       to[j] = '\0';
+}
 
 int main(int argc, char *argv[])
 {
 
 int main(int argc, char *argv[])
 {
-       const char help[] = "usage: udev_volume_id [-t|-l|-u] <device>\n"
+       const char help[] = "usage: udev_volume_id [--export|-t|-l|-u] <device>\n"
+                           "       --export\n"
                            "       -t filesystem type\n"
                            "       -l filesystem label\n"
                            "       -u filesystem uuid\n"
                            "\n";
                            "       -t filesystem type\n"
                            "       -l filesystem label\n"
                            "       -u filesystem uuid\n"
                            "\n";
-       static const char short_options[] = "htlu";
+       enum print_type {
+               PRINT_EXPORT,
+               PRINT_TYPE,
+               PRINT_LABEL,
+               PRINT_UUID,
+       } print = PRINT_EXPORT;
        struct volume_id *vid = NULL;
        struct volume_id *vid = NULL;
-       const char *device;
-       char print = 'a';
        static char name[VOLUME_ID_LABEL_SIZE];
        static char name[VOLUME_ID_LABEL_SIZE];
-       int len, i, j;
+       int i;
        unsigned long long size;
        unsigned long long size;
-       int rc = 1;
+       const char *node = NULL;
+       int rc = 0;
 
        logging_init("udev_volume_id");
 
 
        logging_init("udev_volume_id");
 
-       while (1) {
-               int option;
-
-               option = getopt(argc, argv, short_options);
-               if (option == -1)
-                       break;
-
-               switch (option) {
-               case 't':
-                       print = 't';
-                       continue;
-               case 'l':
-                       print = 'l';
-                       continue;
-               case 'u':
-                       print = 'u';
-                       continue;
-               case 'h':
-               case '?':
-               default:
-                       printf(help);
-                       exit(1);
-               }
+       for (i = 1 ; i < argc; i++) {
+               char *arg = argv[i];
+
+               if (strcmp(arg, "--export") == 0) {
+                       print = PRINT_EXPORT;
+               } else if (strcmp(arg, "-t") == 0) {
+                       print = PRINT_TYPE;
+               } else if (strcmp(arg, "-l") == 0) {
+                       print = PRINT_LABEL;
+               } else if (strcmp(arg, "-u") == 0) {
+                       print = PRINT_UUID;
+               } else
+                       node = arg;
        }
        }
-
-       device = argv[optind];
-       if (device == NULL) {
-               printf(help);
-               exit(1);
+       if (!node) {
+               err("no node specified");
+               fprintf(stderr, help);
+               rc = 1;
+               goto exit;
        }
 
        }
 
-       vid = volume_id_open_node(device);
+       vid = volume_id_open_node(node);
        if (vid == NULL) {
        if (vid == NULL) {
-               printf("error open volume\n");
+               fprintf(stderr, "error open volume\n");
+               rc = 2;
                goto exit;
        }
 
                goto exit;
        }
 
@@ -130,69 +153,46 @@ int main(int argc, char *argv[])
        if (volume_id_probe_dasd(vid) == 0)
                goto print;
 
        if (volume_id_probe_dasd(vid) == 0)
                goto print;
 
-       printf("unknown volume type\n");
+       fprintf(stderr, "unknown volume type\n");
+       rc = 3;
        goto exit;
 
        goto exit;
 
-
 print:
 print:
-       len = strnlen(vid->label, VOLUME_ID_LABEL_SIZE);
-
-       /* remove trailing spaces */
-       while (len > 0 && isspace(vid->label[len-1]))
-               len--;
-       name[len] = '\0';
-
-       /* substitute chars */
-       i = 0;
-       j = 0;
-       while (j < len) {
-               switch(vid->label[j]) {
-               case '/' :
-                       break;
-               case ' ' :
-                       name[i++] = '_';
-                       break;
-               default :
-                       name[i++] = vid->label[j];
-               }
-               j++;
-       }
-       name[i] = '\0';
+       set_str(name, vid->label, sizeof(vid->label));
 
        switch (print) {
 
        switch (print) {
-       case 't':
+       case PRINT_EXPORT:
+               printf("ID_FS_USAGE=%s\n", vid->usage);
+               printf("ID_FS_TYPE=%s\n", vid->type);
+               printf("ID_FS_VERSION=%s\n", vid->type_version);
+               printf("ID_FS_UUID=%s\n", vid->uuid);
+               printf("ID_FS_LABEL=%s\n", vid->label);
+               printf("ID_FS_LABEL_SAFE=%s\n", name);
+               break;
+       case PRINT_TYPE:
                printf("%s\n", vid->type);
                break;
                printf("%s\n", vid->type);
                break;
-       case 'l':
+       case PRINT_LABEL:
                if (name[0] == '\0' ||
                    (vid->usage_id != VOLUME_ID_FILESYSTEM && vid->usage_id != VOLUME_ID_DISKLABEL)) {
                if (name[0] == '\0' ||
                    (vid->usage_id != VOLUME_ID_FILESYSTEM && vid->usage_id != VOLUME_ID_DISKLABEL)) {
-                       rc = 2;
+                       rc = 3;
                        goto exit;
                }
                printf("%s\n", name);
                break;
                        goto exit;
                }
                printf("%s\n", name);
                break;
-       case 'u':
+       case PRINT_UUID:
                if (vid->uuid[0] == '\0' || vid->usage_id != VOLUME_ID_FILESYSTEM) {
                if (vid->uuid[0] == '\0' || vid->usage_id != VOLUME_ID_FILESYSTEM) {
-                       rc = 2;
+                       rc = 4;
                        goto exit;
                }
                printf("%s\n", vid->uuid);
                break;
                        goto exit;
                }
                printf("%s\n", vid->uuid);
                break;
-       case 'a':
-               printf("F:%s\n", vid->usage);
-               printf("T:%s\n", vid->type);
-               printf("V:%s\n", vid->type_version);
-               printf("L:%s\n", vid->label);
-               printf("N:%s\n", name);
-               printf("U:%s\n", vid->uuid);
        }
        }
-       rc = 0;
 
 exit:
        if (vid != NULL)
                volume_id_close(vid);
 
        logging_close();
 
 exit:
        if (vid != NULL)
                volume_id_close(vid);
 
        logging_close();
-
-       exit(rc);
+       return rc;
 }
 }