[git commit] ash: shrink umask code

Denys Vlasenko vda.linux at googlemail.com
Sat Oct 10 18:17:12 UTC 2015


commit: http://git.busybox.net/busybox/commit/?id=005c492c40ff833a99abd251872ec60661344474
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
umaskcmd                                             258     248     -10

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/ash.c |   16 +++++++---------
 1 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/shell/ash.c b/shell/ash.c
index b096812..8a1628e 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -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);
 		}


More information about the busybox-cvs mailing list