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:
@@ -15,7 +15,7 @@
|
||||
|
||||
#define FILEMODEBITS (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO)
|
||||
|
||||
int FAST_FUNC bb_parse_mode(const char *s, mode_t *current_mode)
|
||||
int FAST_FUNC bb_parse_mode(const char *s, unsigned current_mode)
|
||||
{
|
||||
static const mode_t who_mask[] = {
|
||||
S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO, /* a */
|
||||
@@ -46,13 +46,12 @@ int FAST_FUNC bb_parse_mode(const char *s, mode_t *current_mode)
|
||||
|
||||
tmp = strtoul(s, &e, 8);
|
||||
if (*e || (tmp > 07777U)) { /* Check range and trailing chars. */
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
*current_mode = tmp;
|
||||
return 1;
|
||||
return tmp;
|
||||
}
|
||||
|
||||
new_mode = *current_mode;
|
||||
new_mode = current_mode;
|
||||
|
||||
/* Note: we allow empty clauses, and hence empty modes.
|
||||
* We treat an empty mode as no change to perms. */
|
||||
@@ -71,7 +70,7 @@ int FAST_FUNC bb_parse_mode(const char *s, mode_t *current_mode)
|
||||
if (*p == *s) {
|
||||
wholist |= who_mask[(int)(p-who_chars)];
|
||||
if (!*++s) {
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
goto WHO_LIST;
|
||||
}
|
||||
@@ -80,7 +79,7 @@ int FAST_FUNC bb_parse_mode(const char *s, mode_t *current_mode)
|
||||
do { /* Process action list. */
|
||||
if ((*s != '+') && (*s != '-')) {
|
||||
if (*s != '=') {
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
/* Since op is '=', clear all bits corresponding to the
|
||||
* wholist, or all file bits if wholist is empty. */
|
||||
@@ -145,6 +144,5 @@ int FAST_FUNC bb_parse_mode(const char *s, mode_t *current_mode)
|
||||
} while (*s && (*s != ','));
|
||||
}
|
||||
|
||||
*current_mode = new_mode;
|
||||
return 1;
|
||||
return new_mode;
|
||||
}
|
||||
|
Reference in New Issue
Block a user