ash: shrink umask code
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 10 Oct 2015 18:17:12 +0000 (20:17 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 10 Oct 2015 18:17:12 +0000 (20:17 +0200)
function                                             old     new   delta
umaskcmd                                             258     248     -10

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/ash.c

index b096812962d1041ef979a52ae55f0b2cfc46d55f..8a1628e81f3c8826e3a1cb97b35e28f40aac8c41 100644 (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);
                }