]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libblkid: remove obsolete tags from cache
authorKarel Zak <kzak@redhat.com>
Wed, 14 Nov 2012 12:14:29 +0000 (13:14 +0100)
committerKarel Zak <kzak@redhat.com>
Wed, 14 Nov 2012 12:37:34 +0000 (13:37 +0100)
The libblkid cache tags are not removed if a new version of the
tags is empty (e.g. label 'foo' -> '').

 # mkfs.ext4 -L test_label /dev/sda15
 # blkid /dev/sda15
 /dev/sda15: LABEL="test_label"

 # tune2fs -L '' /dev/sda15
 # blkid /dev/sda15
 /dev/sda15: LABEL="test_label"
                    ^^^^^^^^^^

Reported-by: Mike Fleetwood <mike.fleetwood@googlemail.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
libblkid/src/tag.c
libblkid/src/verify.c

index be4ef3516b5712544671716bb2ac8661bf13a4bd..efe67cb29034b059b0bcc80af1440d6b3c3be415 100644 (file)
@@ -136,7 +136,7 @@ int blkid_set_tag(blkid_dev dev, const char *name,
        if (!dev || !name)
                return -BLKID_ERR_PARAM;
 
-       if (!(val = blkid_strndup(value, vlength)) && value)
+       if (value && !(val = blkid_strndup(value, vlength)))
                return -BLKID_ERR_MEM;
 
        /*
index cfb989bcc008b15c4acb47a51470f7fcb0d39072..207152cd870057fcba656db7f44cba761cac83d8 100644 (file)
@@ -43,6 +43,26 @@ static void blkid_probe_to_tags(blkid_probe pr, blkid_dev dev)
                        blkid_set_tag(dev, name, data, len);
                }
        }
+
+       /*
+        * remove obsolete tags
+        */
+       if (!nvals || !blkid_probe_has_value(pr, "LABEL"))
+               blkid_set_tag(dev, "LABEL", NULL, 0);
+       if (!nvals || !blkid_probe_has_value(pr, "UUID"))
+               blkid_set_tag(dev, "UUID", NULL, 0);
+       if (!nvals || !blkid_probe_has_value(pr, "PART_ENTRY_UUID"))
+               blkid_set_tag(dev, "PARTUUID", NULL, 0);
+       if (!nvals || !blkid_probe_has_value(pr, "PART_ENTRY_NAME"))
+               blkid_set_tag(dev, "PARTLABEL", NULL, 0);
+       if (!nvals || !blkid_probe_has_value(pr, "TYPE"))
+               blkid_set_tag(dev, "TYPE", NULL, 0);
+       if (!nvals || !blkid_probe_has_value(pr, "SEC_TYPE"))
+               blkid_set_tag(dev, "SEC_TYPE", NULL, 0);
+       if (!nvals || !blkid_probe_has_value(pr, "EXT_JOURNAL"))        /* extN */
+               blkid_set_tag(dev, "EXT_JOURNAL", NULL, 0);
+       if (!nvals || !blkid_probe_has_value(pr, "MOUNT"))              /* ocfs */
+               blkid_set_tag(dev, "MOUNT", NULL, 0);
 }
 
 /*