*: optimize code size in strtoul calls

function                                             old     new   delta
bb_parse_mode                                        433     431      -2
rtnl_rtntype_a2n                                     202     198      -4
ParseField                                           511     498     -13
bb_init_module_24                                   4730    4675     -55
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 0/4 up/down: 0/-74)             Total: -74 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2009-09-23 17:17:53 +02:00
parent 8d338173a4
commit 1f27ab0d4b
8 changed files with 37 additions and 23 deletions

View File

@ -2432,11 +2432,11 @@ new_process_module_arguments(struct obj_file *f, const char *options)
loc = contents + sym->value;
if (*pinfo == 'c') {
if (!isdigit(*(pinfo + 1))) {
if (!isdigit(pinfo[1])) {
bb_error_msg_and_die("parameter type 'c' for %s must be followed by"
" the maximum size", param);
}
charssize = strtoul(pinfo + 1, (char **) NULL, 10);
charssize = strtoul(pinfo + 1, NULL, 10);
}
if (val == NULL) {
@ -2449,6 +2449,8 @@ new_process_module_arguments(struct obj_file *f, const char *options)
n = 0;
p = val;
while (*p != 0) {
char *endp;
if (++n > max)
bb_error_msg_and_die("too many values for %s (max %d)", param, max);
@ -2472,19 +2474,23 @@ new_process_module_arguments(struct obj_file *f, const char *options)
p += len;
break;
case 'b':
*loc++ = strtoul(p, &p, 0);
*loc++ = strtoul(p, &endp, 0);
p = endp; /* gcc likes temp var for &endp */
break;
case 'h':
*(short *) loc = strtoul(p, &p, 0);
*(short *) loc = strtoul(p, &endp, 0);
loc += tgt_sizeof_short;
p = endp;
break;
case 'i':
*(int *) loc = strtoul(p, &p, 0);
*(int *) loc = strtoul(p, &endp, 0);
loc += tgt_sizeof_int;
p = endp;
break;
case 'l':
*(long *) loc = strtoul(p, &p, 0);
*(long *) loc = strtoul(p, &endp, 0);
loc += tgt_sizeof_long;
p = endp;
break;
default:
bb_error_msg_and_die("unknown parameter type '%c' for %s",