ash: shrink umask code

function                                             old     new   delta
umaskcmd                                             258     248     -10

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2015-10-10 20:17:12 +02:00
parent 02859aaeb2
commit 005c492c40

View File

@ -12826,27 +12826,25 @@ umaskcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
if (*argptr == NULL) {
if (symbolic_mode) {
char buf[sizeof("u=rwx,g=rwx,o=rwx")];
char buf[sizeof(",u=rwx,g=rwx,o=rwx")];
char *p = buf;
int i;
i = 2;
for (;;) {
unsigned bits;
*p++ = ',';
*p++ = permuser[i];
*p++ = '=';
/* mask is 0..0uuugggooo. i=2 selects uuu bits */
bits = (mask >> (i*3));
if (!(bits & 4)) *p++ = 'r';
if (!(bits & 2)) *p++ = 'w';
if (!(bits & 1)) *p++ = 'x';
if (!(mask & 0400)) *p++ = 'r';
if (!(mask & 0200)) *p++ = 'w';
if (!(mask & 0100)) *p++ = 'x';
mask <<= 3;
if (--i < 0)
break;
*p++ = ',';
}
*p = '\0';
puts(buf);
puts(buf + 1);
} else {
out1fmt("%04o\n", mask);
}