diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2015-10-07 17:55:33 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2015-10-07 17:55:33 +0200 |
commit | 5711a2a4ad51ad203a2ed4ffc72593e83920b36a (patch) | |
tree | ef650852b982768fa9c3e4065016e09cbf2d0a96 /shell | |
parent | c1e2e005b4e99070f58a3545bad54ef41a634ad1 (diff) | |
download | busybox-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.c | 3 | ||||
-rw-r--r-- | shell/hush.c | 7 |
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 */ |