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>
This commit is contained in:
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user