From: Karel Zak Date: Wed, 14 Nov 2012 12:14:29 +0000 (+0100) Subject: libblkid: remove obsolete tags from cache X-Git-Tag: v2.23-rc1~524 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1f8590b56b8a461014acb3b7d041c1af3f658613;p=thirdparty%2Futil-linux.git libblkid: remove obsolete tags from cache 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 Signed-off-by: Karel Zak --- diff --git a/libblkid/src/tag.c b/libblkid/src/tag.c index be4ef3516b..efe67cb290 100644 --- a/libblkid/src/tag.c +++ b/libblkid/src/tag.c @@ -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; /* diff --git a/libblkid/src/verify.c b/libblkid/src/verify.c index cfb989bcc0..207152cd87 100644 --- a/libblkid/src/verify.c +++ b/libblkid/src/verify.c @@ -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); } /*