summaryrefslogtreecommitdiffstats
path: root/usr.sbin/extattr
diff options
context:
space:
mode:
authorsjg <sjg@FreeBSD.org>2013-04-12 20:48:55 +0000
committersjg <sjg@FreeBSD.org>2013-04-12 20:48:55 +0000
commit97d8b9495668afa398ab17c8c5f7e223b5fd2e89 (patch)
tree54038c9ac32a45f8741dcc23fb9a8ffc0e15ff89 /usr.sbin/extattr
parent5ee3bfdb338e7c80af29a67f4425c4be24c7b866 (diff)
parent086d73aef6d0ab7d21daa2076fdc8d25961f9b05 (diff)
downloadFreeBSD-src-97d8b9495668afa398ab17c8c5f7e223b5fd2e89.zip
FreeBSD-src-97d8b9495668afa398ab17c8c5f7e223b5fd2e89.tar.gz
sync from head
Diffstat (limited to 'usr.sbin/extattr')
-rw-r--r--usr.sbin/extattr/rmextattr.c61
1 files changed, 34 insertions, 27 deletions
diff --git a/usr.sbin/extattr/rmextattr.c b/usr.sbin/extattr/rmextattr.c
index db7df1a..c061943 100644
--- a/usr.sbin/extattr/rmextattr.c
+++ b/usr.sbin/extattr/rmextattr.c
@@ -102,6 +102,8 @@ main(int argc, char *argv[])
char *buf, *visbuf, *p;
const char *options, *attrname;
+ size_t len;
+ ssize_t ret;
int buflen, visbuflen, ch, error, i, arg_counter, attrnamespace,
minargc;
@@ -200,79 +202,84 @@ main(int argc, char *argv[])
continue;
break;
case EASET:
+ len = strlen(buf) + flag_null;
if (flag_nofollow)
- error = extattr_set_link(argv[arg_counter],
- attrnamespace, attrname, buf,
- strlen(buf) + flag_null);
+ ret = extattr_set_link(argv[arg_counter],
+ attrnamespace, attrname, buf, len);
else
- error = extattr_set_file(argv[arg_counter],
- attrnamespace, attrname, buf,
- strlen(buf) + flag_null);
- if (error >= 0)
+ ret = extattr_set_file(argv[arg_counter],
+ attrnamespace, attrname, buf, len);
+ if (ret >= 0) {
+ if ((size_t)ret != len && !flag_quiet) {
+ warnx("Set %zd bytes of %zu for %s",
+ ret, len, attrname);
+ }
continue;
+ }
break;
case EALS:
if (flag_nofollow)
- error = extattr_list_link(argv[arg_counter],
+ ret = extattr_list_link(argv[arg_counter],
attrnamespace, NULL, 0);
else
- error = extattr_list_file(argv[arg_counter],
+ ret = extattr_list_file(argv[arg_counter],
attrnamespace, NULL, 0);
- if (error < 0)
+ if (ret < 0)
break;
- mkbuf(&buf, &buflen, error);
+ mkbuf(&buf, &buflen, ret);
if (flag_nofollow)
- error = extattr_list_link(argv[arg_counter],
+ ret = extattr_list_link(argv[arg_counter],
attrnamespace, buf, buflen);
else
- error = extattr_list_file(argv[arg_counter],
+ ret = extattr_list_file(argv[arg_counter],
attrnamespace, buf, buflen);
- if (error < 0)
+ if (ret < 0)
break;
if (!flag_quiet)
printf("%s\t", argv[arg_counter]);
- for (i = 0; i < error; i += ch + 1) {
+ for (i = 0; i < ret; i += ch + 1) {
/* The attribute name length is unsigned. */
ch = (unsigned char)buf[i];
printf("%s%*.*s", i ? "\t" : "",
ch, ch, buf + i + 1);
}
- printf("\n");
+ if (!flag_quiet || ret > 0)
+ printf("\n");
continue;
case EAGET:
if (flag_nofollow)
- error = extattr_get_link(argv[arg_counter],
+ ret = extattr_get_link(argv[arg_counter],
attrnamespace, attrname, NULL, 0);
else
- error = extattr_get_file(argv[arg_counter],
+ ret = extattr_get_file(argv[arg_counter],
attrnamespace, attrname, NULL, 0);
- if (error < 0)
+ if (ret < 0)
break;
- mkbuf(&buf, &buflen, error);
+ mkbuf(&buf, &buflen, ret);
if (flag_nofollow)
- error = extattr_get_link(argv[arg_counter],
+ ret = extattr_get_link(argv[arg_counter],
attrnamespace, attrname, buf, buflen);
else
- error = extattr_get_file(argv[arg_counter],
+ ret = extattr_get_file(argv[arg_counter],
attrnamespace, attrname, buf, buflen);
- if (error < 0)
+ if (ret < 0)
break;
if (!flag_quiet)
printf("%s\t", argv[arg_counter]);
if (flag_string) {
- mkbuf(&visbuf, &visbuflen, error * 4 + 1);
- strvisx(visbuf, buf, error,
+ mkbuf(&visbuf, &visbuflen, ret * 4 + 1);
+ strvisx(visbuf, buf, ret,
VIS_SAFE | VIS_WHITE);
printf("\"%s\"\n", visbuf);
continue;
} else if (flag_hex) {
- for (i = 0; i < error; i++)
+ for (i = 0; i < ret; i++)
printf("%s%02x", i ? " " : "",
buf[i]);
printf("\n");
continue;
} else {
- fwrite(buf, error, 1, stdout);
+ fwrite(buf, ret, 1, stdout);
printf("\n");
continue;
}
OpenPOWER on IntegriCloud