aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2015-10-07 17:55:33 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2015-10-07 17:55:33 +0200
commit5711a2a4ad51ad203a2ed4ffc72593e83920b36a (patch)
treeef650852b982768fa9c3e4065016e09cbf2d0a96 /shell
parentc1e2e005b4e99070f58a3545bad54ef41a634ad1 (diff)
downloadbusybox-w32-5711a2a4ad51ad203a2ed4ffc72593e83920b36a.tar.gz
busybox-w32-5711a2a4ad51ad203a2ed4ffc72593e83920b36a.tar.bz2
busybox-w32-5711a2a4ad51ad203a2ed4ffc72593e83920b36a.zip
libbb: more compact API for bb_parse_mode()
function old new delta make_device 2182 2188 +6 parse_command 1440 1443 +3 parse_params 1497 1499 +2 install_main 773 769 -4 mkdir_main 168 160 -8 getoptscmd 641 632 -9 builtin_umask 158 147 -11 bb_parse_mode 431 410 -21 umaskcmd 286 258 -28 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/6 up/down: 11/-81) Total: -70 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rw-r--r--shell/ash.c3
-rw-r--r--shell/hush.c7
2 files changed, 6 insertions, 4 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 80dfc1d6a..ab8ec006f 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -12862,7 +12862,8 @@ umaskcmd(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
12862 /* symbolic umasks are inverted: "umask a=rx" calls umask(222) */ 12862 /* symbolic umasks are inverted: "umask a=rx" calls umask(222) */
12863 if (!isdigit(modestr[0])) 12863 if (!isdigit(modestr[0]))
12864 mask ^= 0777; 12864 mask ^= 0777;
12865 if (!bb_parse_mode(modestr, &mask) || (unsigned)mask > 0777) { 12865 mask = bb_parse_mode(modestr, mask);
12866 if ((unsigned)mask > 0777) {
12866 ash_msg_and_raise_error("illegal mode: %s", modestr); 12867 ash_msg_and_raise_error("illegal mode: %s", modestr);
12867 } 12868 }
12868 if (!isdigit(modestr[0])) 12869 if (!isdigit(modestr[0]))
diff --git a/shell/hush.c b/shell/hush.c
index 8b8d5fc8b..bccd9c1e9 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -8965,6 +8965,7 @@ static int FAST_FUNC builtin_umask(char **argv)
8965 int rc; 8965 int rc;
8966 mode_t mask; 8966 mode_t mask;
8967 8967
8968 rc = 1;
8968 mask = umask(0); 8969 mask = umask(0);
8969 argv = skip_dash_dash(argv); 8970 argv = skip_dash_dash(argv);
8970 if (argv[0]) { 8971 if (argv[0]) {
@@ -8974,19 +8975,19 @@ static int FAST_FUNC builtin_umask(char **argv)
8974 /* symbolic umasks are inverted: "umask a=rx" calls umask(222) */ 8975 /* symbolic umasks are inverted: "umask a=rx" calls umask(222) */
8975 if (!isdigit(argv[0][0])) 8976 if (!isdigit(argv[0][0]))
8976 mask ^= 0777; 8977 mask ^= 0777;
8977 rc = bb_parse_mode(argv[0], &mask); 8978 mask = bb_parse_mode(argv[0], mask);
8978 if (!isdigit(argv[0][0])) 8979 if (!isdigit(argv[0][0]))
8979 mask ^= 0777; 8980 mask ^= 0777;
8980 if (rc == 0 || (unsigned)mask > 0777) { 8981 if ((unsigned)mask > 0777) {
8981 mask = old_mask; 8982 mask = old_mask;
8982 /* bash messages: 8983 /* bash messages:
8983 * bash: umask: 'q': invalid symbolic mode operator 8984 * bash: umask: 'q': invalid symbolic mode operator
8984 * bash: umask: 999: octal number out of range 8985 * bash: umask: 999: octal number out of range
8985 */ 8986 */
8986 bb_error_msg("%s: invalid mode '%s'", "umask", argv[0]); 8987 bb_error_msg("%s: invalid mode '%s'", "umask", argv[0]);
8988 rc = 0;
8987 } 8989 }
8988 } else { 8990 } else {
8989 rc = 1;
8990 /* Mimic bash */ 8991 /* Mimic bash */
8991 printf("%04o\n", (unsigned) mask); 8992 printf("%04o\n", (unsigned) mask);
8992 /* fall through and restore mask which we set to 0 */ 8993 /* fall through and restore mask which we set to 0 */