diff options
author | Andreas Gruenbacher <andreas.gruenbacher@gmail.com> | 2015-02-20 22:42:19 +0100 |
---|---|---|
committer | Andreas Gruenbacher <andreas.gruenbacher@gmail.com> | 2015-02-20 22:52:02 +0100 |
commit | 0550d2bc989d390eb25f7004ee0fae2dbc693a0d (patch) | |
tree | d8d999c1e351184b09e1c7ecce925c6bcbbd0d48 | |
parent | 93392767681ea2e0628df08884d74914fb275fa6 (diff) | |
download | attr-0550d2bc989d390eb25f7004ee0fae2dbc693a0d.tar.gz |
Properly set and report empty attribute values
Change getfattr to print empty attribute values as "" (including the quotes),
0x, or 0s, depending on the encoding chosen. Fix setfattr to set empty
attribute values when the value specified is an empty string; before, an
encoded empty value like "" (including the quotes) had to be specified.
-rw-r--r-- | test/attr.test | 26 | ||||
-rw-r--r-- | tools/getfattr.c | 2 | ||||
-rw-r--r-- | tools/setfattr.c | 2 |
3 files changed, 21 insertions, 9 deletions
diff --git a/test/attr.test b/test/attr.test index 5cb810e..1f755ae 100644 --- a/test/attr.test +++ b/test/attr.test @@ -19,7 +19,7 @@ Try various valid and invalid names $ setfattr -n user.name f $ getfattr -d f > # file: f - > user.name + > user.name="" > $ setfattr -x user.name f @@ -98,8 +98,8 @@ Everything with one file $ getfattr -d f > # file: f > user.longername="longervalue" - > user.novalue - > user.novalue-yet + > user.novalue="" + > user.novalue-yet="" > user.short="value" > user.somename="somevalue" > @@ -108,7 +108,7 @@ Everything with one file $ getfattr -d f > # file: f > user.longername="longervalue" - > user.novalue + > user.novalue="" > user.novalue-yet="avalue-now" > user.short="value" > user.somename="somevalue" @@ -122,7 +122,7 @@ Everything with one file $ getfattr -d f > # file: f > user.longername="longervalue" - > user.novalue + > user.novalue="" > user.novalue-yet="avalue-now" > @@ -166,13 +166,13 @@ Test extended attribute block sharing $ getfattr -d f g h | sort-getfattr-output > # file: f > user.name="value" - > user.novalue + > user.novalue="" > > # file: g - > user.novalue + > user.novalue="" > > # file: h - > user.novalue + > user.novalue="" > $ setfattr -n user.name -v value g @@ -240,6 +240,16 @@ Tests for file name that contain special characters $ rm "f " +Tests for empty attribute values + + $ touch f + $ setfattr -n user.name -v '' f + $ getfattr -d f + > # file: f + > user.name="" + > + $ rm f + Tests for attribute names that contains special characters $ touch f diff --git a/tools/getfattr.c b/tools/getfattr.c index 692d2d8..9ea44d5 100644 --- a/tools/getfattr.c +++ b/tools/getfattr.c @@ -277,7 +277,7 @@ int print_attribute(const char *path, const char *name, int *header_printed) if (opt_value_only) fwrite(value, length, 1, stdout); - else if (length) { + else if (opt_dump) { const char *enc = encode(value, &length); if (enc) diff --git a/tools/setfattr.c b/tools/setfattr.c index 4f5daa9..33a4282 100644 --- a/tools/setfattr.c +++ b/tools/setfattr.c @@ -289,6 +289,8 @@ const char *decode(const char *value, size_t *size) static char *decoded; static size_t decoded_size; + if (*size == 0) + return ""; if (value[0] == '0' && (value[1] == 'x' || value[1] == 'X')) { const char *v = value+2, *end = value + *size; char *d; |