if (!ntok[0]) {
s = BOL;
} else {
- s = xatoi_u(ntok);
+ s = xatoi_positive(ntok);
/* account for the fact that arrays are zero based, while
* the user expects the first char on the line to be char #1 */
if (s != 0)
} else if (!ltok[0]) {
e = EOL;
} else {
- e = xatoi_u(ltok);
+ e = xatoi_positive(ltok);
/* if the user specified and end position of 0,
* that means "til the end of the line" */
if (e == 0)
scale = 1;
pres = 9;
if (n) {
- pres = xatoi_u(p);
+ pres = xatoi_positive(p);
if (pres == 0)
pres = 9;
m = 9 - pres;
// IF_FEATURE_START_STOP_DAEMON_FANCY(
// if (retry_arg)
-// retries = xatoi_u(retry_arg);
+// retries = xatoi_positive(retry_arg);
// )
//argc -= optind;
argv += optind;
case 'C':
progress = 1;
if (arg[++j]) { /* -Cn */
- progress_fd = xatoi_u(&arg[j]);
+ progress_fd = xatoi_positive(&arg[j]);
goto next_arg;
}
/* -C n */
if (!*++argv)
bb_show_usage();
- progress_fd = xatoi_u(*argv);
+ progress_fd = xatoi_positive(*argv);
goto next_arg;
#endif
case 'V':
creator_os = optarg;
break;
case 'r':
- param.s_rev_level = xatoi_u(optarg);
+ param.s_rev_level = xatoi_positive(optarg);
if (param.s_rev_level == EXT2_GOOD_OLD_REV) {
param.s_feature_incompat = 0;
param.s_feature_compat = 0;
break;
#ifdef EXT2_DYNAMIC_REV
case 'I':
- inode_size = xatoi_u(optarg);
+ inode_size = xatoi_positive(optarg);
break;
#endif
case 'N':
- num_inodes = xatoi_u(optarg);
+ num_inodes = xatoi_positive(optarg);
break;
case 'v':
quiet = 0;
if (opt == OPT_MINDEPTH || opt == OPT_MINDEPTH + 1) {
if (!argp[1])
bb_show_usage();
- minmaxdepth[opt - OPT_MINDEPTH] = xatoi_u(argp[1]);
+ minmaxdepth[opt - OPT_MINDEPTH] = xatoi_positive(argp[1]);
argp[0] = (char*)"-a";
argp[1] = (char*)"-a";
argp++;
/* While sizeof(off_t) == sizeof(int), off_t is typedef'ed to long anyway.
* gcc will throw warnings on printf("%d", off_t). Crap... */
typedef unsigned long uoff_t;
-# define XATOOFF(a) xatoi_u(a)
+# define XATOOFF(a) xatoi_positive(a)
# define BB_STRTOOFF bb_strtou
# define STRTOOFF strtol
# define OFF_FMT "l"
};
#include "xatonum.h"
/* Specialized: */
+
/* Using xatoi() instead of naive atoi() is not always convenient -
* in many places people want *non-negative* values, but store them
* in signed int. Therefore we need this one:
- * dies if input is not in [0, INT_MAX] range. Also will reject '-0' etc */
-int xatoi_u(const char *numstr) FAST_FUNC;
+ * dies if input is not in [0, INT_MAX] range. Also will reject '-0' etc.
+ * It should really be named xatoi_nonnegative (since it allows 0),
+ * but that would be too long.
+ */
+int xatoi_positive(const char *numstr) FAST_FUNC;
+
/* Useful for reading port numbers */
uint16_t xatou16(const char *numstr) FAST_FUNC;
"a+" A plus after a char in opt_complementary means that the parameter
for this option is a nonnegative integer. It will be processed
- with xatoi_u() - allowed range is 0..INT_MAX.
+ with xatoi_positive() - allowed range is 0..INT_MAX.
int param; // "unsigned param;" will also work
opt_complementary = "p+";
llist_add_to_end((llist_t **)(on_off->optarg), optarg);
} else if (on_off->param_type == PARAM_INT) {
if (optarg)
-//TODO: xatoi_u indirectly pulls in printf machinery
- *(unsigned*)(on_off->optarg) = xatoi_u(optarg);
+//TODO: xatoi_positive indirectly pulls in printf machinery
+ *(unsigned*)(on_off->optarg) = xatoi_positive(optarg);
} else if (on_off->optarg) {
if (optarg)
*(char **)(on_off->optarg) = optarg;
/* A few special cases */
-int FAST_FUNC xatoi_u(const char *numstr)
+int FAST_FUNC xatoi_positive(const char *numstr)
{
return xatou_range(numstr, 0, INT_MAX);
}
parser_t *parser = config_open2(cfg_filename, xfopen_stdin);
while (config_read(parser, token, 2, 2, "#=",
(PARSE_NORMAL | PARSE_MIN_DIE) & ~(PARSE_TRIM | PARSE_COLLAPSE))) {
- unsigned val = xatoi_u(token[1]);
+ unsigned val = xatoi_positive(token[1]);
int i = index_in_strings(param_names, token[0]);
if (i < 0)
bb_error_msg_and_die("syntax error: %s", token[0]);
#if ENABLE_FEATURE_HDPARM_HDIO_SCAN_HWIF
if (c == 'R') {
scan_hwif = parse_opts_0_INTMAX(&hwif_data);
- hwif_ctrl = xatoi_u((argv[optind]) ? argv[optind] : "");
- hwif_irq = xatoi_u((argv[optind+1]) ? argv[optind+1] : "");
+ hwif_ctrl = xatoi_positive((argv[optind]) ? argv[optind] : "");
+ hwif_irq = xatoi_positive((argv[optind+1]) ? argv[optind+1] : "");
/* Move past the 2 additional arguments */
argv += 2;
argc -= 2;
if (!(opt & (OPT_n|OPT_c))) {
if (!(opt & OPT_p) && *argv)
- pid = xatoi_u(*argv);
+ pid = xatoi_positive(*argv);
pri = ioprio_get(IOPRIO_WHO_PROCESS, pid);
if (pri == -1)
basedev = argv[1];
buf = xasprintf("%s%u", argv[1], (unsigned)-1);
type = argv[2];
- Smajor = xatoi_u(argv[3]);
- Sminor = xatoi_u(argv[4]);
- S = xatoi_u(argv[5]);
- E = xatoi_u(argv[6]);
+ Smajor = xatoi_positive(argv[3]);
+ Sminor = xatoi_positive(argv[4]);
+ S = xatoi_positive(argv[5]);
+ E = xatoi_positive(argv[6]);
nodname = argv[7] ? basedev : buf;
mode = 0660;
op.mt_op = opcode_value[idx];
if (argv[2])
- op.mt_count = xatoi_u(argv[2]);
+ op.mt_count = xatoi_positive(argv[2]);
else
op.mt_count = 1; /* One, not zero, right? */
rf_name = "uwb";
rf_type = index_in_strings(rfkill_types, rf_name);
if (rf_type < 0) {
- rf_idx = xatoi_u(rf_name);
+ rf_idx = xatoi_positive(rf_name);
}
}
}
}
arg1 = port;
- arg2 = xatoi_u(*argv);
+ arg2 = xatoi_positive(*argv);
if (key == ARG_setbridgeprio) {
arg1 = arg2;
arg2 = 0;
handle_rest(void)
{
/* When ftp_arg == NULL simply restart from beginning */
- G.restart_pos = G.ftp_arg ? xatoi_u(G.ftp_arg) : 0;
+ G.restart_pos = G.ftp_arg ? xatoi_positive(G.ftp_arg) : 0;
WRITE_OK(FTP_RESTOK);
}
} while (!isdigit(buf[0]) || buf[3] != ' ');
buf[3] = '\0';
- result = xatoi_u(buf);
+ result = xatoi_positive(buf);
buf[3] = ' ';
return result;
}
while (1) {
char *fname;
int fd;
- // int is easier than ssize_t: can use xatoi_u,
+ // int is easier than ssize_t: can use xatoi_positive,
// and can correctly display error returns (-1)
int expected_len, real_len;
if (*argv) {
/* Get interval */
- interval = xatoi_u(*argv);
+ interval = xatoi_positive(*argv);
count = interval ? -1 : 1;
argv++;
if (*argv)
/* Get count value */
- count = xatoi_u(*argv);
+ count = xatoi_positive(*argv);
}
/* Allocate space for device stats */
if (*argv) {
/* Get interval */
- G.interval = xatoi_u(*argv);
+ G.interval = xatoi_positive(*argv);
G.count = -1;
argv++;
if (*argv) {
/* Get count value */
if (G.interval == 0)
bb_show_usage();
- G.count = xatoi_u(*argv);
+ G.count = xatoi_positive(*argv);
//if (*++argv)
// bb_show_usage();
}
memset(G.cpu_bitmap, 0xff, G.cpu_bitmap_len);
} else {
/* Get CPU number */
- unsigned n = xatoi_u(t);
+ unsigned n = xatoi_positive(t);
if (n >= G.cpu_nr)
bb_error_msg_and_die("not that many processors");
n++;
if (param[0] == '\0') {
s->no = 1;
} else {
- int n = xatoi_u(param);
+ int n = xatoi_positive(param);
s->no = n + 2;
}
return (s_stat*)s;
break;
}
case 'n':
- ld->nmax = xatoi_u(&s[1]);
+ ld->nmax = xatoi_positive(&s[1]);
break;
case 'N':
- ld->nmin = xatoi_u(&s[1]);
+ ld->nmin = xatoi_positive(&s[1]);
break;
case 't': {
static const struct suffix_mult mh_suffixes[] = {
linemax = 256;
}
////if (opt & 8) { // -b
- //// buflen = xatoi_u(b);
+ //// buflen = xatoi_positive(b);
//// if (buflen == 0) buflen = 1024;
////}
//if (opt & 0x10) timestamp++; // -t
/* lookup the variable in question */
if (isdigit(var[0])) {
/* parse_dollar() should have vetted var for us */
- i = xatoi_u(var);
+ i = xatoi_positive(var);
if (i < G.global_argc)
val = G.global_argv[i];
/* else val remains NULL: $N with too big N */
bb_perror_msg_and_die("can't open '%s'", argv[0]);
//TODO? close_on_exec_on(fd);
} else {
- fd = xatoi_u(argv[0]);
+ fd = xatoi_positive(argv[0]);
}
argv++;
bb_dump_addfile(dumper, optarg);
} /* else */
if (ch == 'n') {
- dumper->dump_length = xatoi_u(optarg);
+ dumper->dump_length = xatoi_positive(optarg);
} /* else */
if (ch == 's') { /* compat: -s accepts hex numbers too */
dumper->dump_skip = xstrtoul_range_sfx(optarg, /*base:*/ 0, /*lo:*/ 0, /*hi:*/ LONG_MAX, suffixes);
continue;
}
- val = xatoi_u(opteq);
+ val = xatoi_positive(opteq);
switch (idx) {
case 0: // "rsize"
data.rsize = val;