chiark / gitweb /
[PATCH] udev_volume_id: fix dasd disklabel reading with -l option
[elogind.git] / extras / volume_id / udev_volume_id.c
index 915c1c411739a073b91a10a44c7260244e4f1719..d3c3fcd505dab49a01a1fc47d967522d0bbcea66 100644 (file)
@@ -89,7 +89,7 @@ int main(int argc, char *argv[])
        struct sysfs_class_device *class_dev_parent = NULL;
        struct volume_id *vid = NULL;
        char *devpath;
-       char probe = 'p';
+       char probe_disk_label = 0;
        char print = 'a';
        static char name[VOLUME_ID_LABEL_SIZE];
        int len, i, j;
@@ -116,7 +116,7 @@ int main(int argc, char *argv[])
                        print = 'u';
                        continue;
                case 'd':
-                       probe = 'd';
+                       probe_disk_label = 1;
                        continue;
                case 'h':
                case '?':
@@ -146,9 +146,7 @@ int main(int argc, char *argv[])
                goto exit;
        }
 
-       switch(probe) {
-       case 'p' :
-               /* open block device */
+       if (probe_disk_label == 0) {
                vid = open_classdev(class_dev);
                if (vid == NULL)
                        goto exit;
@@ -158,8 +156,7 @@ int main(int argc, char *argv[])
 
                if (volume_id_probe_all(vid, 0, size) == 0)
                        goto print;
-               break;
-       case 'd' :
+       } else {
                /* if we are on a partition, open main block device instead */
                class_dev_parent = sysfs_get_classdev_parent(class_dev);
                if (class_dev_parent != NULL)
@@ -169,9 +166,8 @@ int main(int argc, char *argv[])
                if (vid == NULL)
                        goto exit;
 
-               if (probe_ibm_partition(vid) == 0)
+               if (volume_id_probe_dasd_partition(vid) == 0)
                        goto print;
-               break;
        }
 
        printf("unknown volume type\n");
@@ -208,7 +204,8 @@ print:
                printf("%s\n", vid->type);
                break;
        case 'l':
-               if (name[0] == '\0' || vid->usage_id != VOLUME_ID_FILESYSTEM) {
+               if (name[0] == '\0' ||
+                   (vid->usage_id != VOLUME_ID_FILESYSTEM && vid->usage_id != VOLUME_ID_DISKLABEL)) {
                        rc = 2;
                        goto exit;
                }