]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libblkid: add support for PARTUUID= and PARTLABEL=
authorKarel Zak <kzak@redhat.com>
Thu, 19 Apr 2012 12:33:49 +0000 (14:33 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 19 Apr 2012 12:33:49 +0000 (14:33 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
include/pathnames.h
libblkid/src/evaluate.c
libblkid/src/verify.c

index 1757044f5ae51ce3cdd12284a6a5d20e099c8e4c..88bec08dfc4904ef634546e0cfa8cd2ae7693734 100644 (file)
 #define _PATH_DEV_BYUUID       "/dev/disk/by-uuid"
 #define _PATH_DEV_BYID         "/dev/disk/by-id"
 #define _PATH_DEV_BYPATH       "/dev/disk/by-path"
+#define _PATH_DEV_BYPARTLABEL  "/dev/disk/by-partlabel"
+#define _PATH_DEV_BYPARTUUID   "/dev/disk/by-partuuid"
 
 /* hwclock paths */
 #define _PATH_ADJPATH          "/etc/adjtime"
index d20b922f61decab36e506320b57343a07c0c372d..fbd8a96fd6b160927007b637bbc3c38ebb82449b 100644 (file)
@@ -65,6 +65,9 @@ static int verify_tag(const char *devname, const char *name, const char *value)
        blkid_probe_set_superblocks_flags(pr,
                        BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID);
 
+       blkid_probe_enable_partitions(pr, TRUE);
+       blkid_probe_set_partitions_flags(pr, BLKID_PARTS_ENTRY_DETAILS);
+
        fd = open(devname, O_RDONLY);
        if (fd < 0) {
                errsv = errno;
@@ -139,6 +142,10 @@ static char *evaluate_by_udev(const char *token, const char *value, int uevent)
                strcpy(dev, _PATH_DEV_BYUUID "/");
        else if (!strcmp(token, "LABEL"))
                strcpy(dev, _PATH_DEV_BYLABEL "/");
+       else if (!strcmp(token, "PARTLABEL"))
+               strcpy(dev, _PATH_DEV_BYPARTLABEL "/");
+       else if (!strcmp(token, "PARTUUID"))
+               strcpy(dev, _PATH_DEV_BYPARTUUID "/");
        else {
                DBG(DEBUG_EVALUATE,
                    printf("unsupported token %s\n", token));
index 49cc6f17385bcaffa46a8104c57725dcc147eb05..cbb409607a5dc993ed6cc7fd2d7aa04c012d7e52 100644 (file)
@@ -31,8 +31,17 @@ static void blkid_probe_to_tags(blkid_probe pr, blkid_dev dev)
        nvals = blkid_probe_numof_values(pr);
 
        for (n = 0; n < nvals; n++) {
-               if (blkid_probe_get_value(pr, n, &name, &data, &len) == 0)
+               if (blkid_probe_get_value(pr, n, &name, &data, &len) != 0)
+                       continue;
+               if (strncmp(name, "PART_ENTRY_", 11) == 0) {
+                       if (strcmp(name, "PART_ENTRY_UUID") == 0)
+                               blkid_set_tag(dev, "PARTUUID", data, len);
+                       else if (strcmp(name, "PART_ENTRY_NAME") == 0)
+                               blkid_set_tag(dev, "PARTLABEL", data, len);
+               } else {
+                       /* superblock UUID, LABEL, ... */
                        blkid_set_tag(dev, name, data, len);
+               }
        }
 }
 
@@ -132,6 +141,9 @@ blkid_dev blkid_verify(blkid_cache cache, blkid_dev dev)
                BLKID_SUBLKS_LABEL | BLKID_SUBLKS_UUID |
                BLKID_SUBLKS_TYPE | BLKID_SUBLKS_SECTYPE);
 
+       blkid_probe_enable_partitions(cache->probe, TRUE);
+       blkid_probe_set_partitions_flags(cache->probe, BLKID_PARTS_ENTRY_DETAILS);
+
        /*
         * If we already know the type, then try that first.
         */