aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
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)
/* symbolic umasks are inverted: "umask a=rx" calls umask(222) */
if (!isdigit(modestr[0]))
mask ^= 0777;
- if (!bb_parse_mode(modestr, &mask) || (unsigned)mask > 0777) {
+ mask = bb_parse_mode(modestr, mask);
+ if ((unsigned)mask > 0777) {
ash_msg_and_raise_error("illegal mode: %s", modestr);
}
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)
int rc;
mode_t mask;
+ rc = 1;
mask = umask(0);
argv = skip_dash_dash(argv);
if (argv[0]) {
@@ -8974,19 +8975,19 @@ static int FAST_FUNC builtin_umask(char **argv)
/* symbolic umasks are inverted: "umask a=rx" calls umask(222) */
if (!isdigit(argv[0][0]))
mask ^= 0777;
- rc = bb_parse_mode(argv[0], &mask);
+ mask = bb_parse_mode(argv[0], mask);
if (!isdigit(argv[0][0]))
mask ^= 0777;
- if (rc == 0 || (unsigned)mask > 0777) {
+ if ((unsigned)mask > 0777) {
mask = old_mask;
/* bash messages:
* bash: umask: 'q': invalid symbolic mode operator
* bash: umask: 999: octal number out of range
*/
bb_error_msg("%s: invalid mode '%s'", "umask", argv[0]);
+ rc = 0;
}
} else {
- rc = 1;
/* Mimic bash */
printf("%04o\n", (unsigned) mask);
/* fall through and restore mask which we set to 0 */