attempt to regularize atoi mess.
This commit is contained in:
@@ -112,9 +112,9 @@ int cal_main(int argc, char **argv)
|
||||
}
|
||||
} else {
|
||||
if (argc == 2) {
|
||||
month = bb_xgetularg10_bnd(*argv++, 1, 12);
|
||||
month = xatoul_range(*argv++, 1, 12);
|
||||
}
|
||||
year = bb_xgetularg10_bnd(*argv, 1, 9999);
|
||||
year = xatoul_range(*argv, 1, 9999);
|
||||
}
|
||||
|
||||
blank_string(day_headings, sizeof(day_headings) - 7 + 7*julian);
|
||||
|
||||
@@ -163,17 +163,7 @@ static void cut_file(FILE * file)
|
||||
}
|
||||
}
|
||||
|
||||
static int getval(char *ntok)
|
||||
{
|
||||
char *junk;
|
||||
int i = strtoul(ntok, &junk, 10);
|
||||
|
||||
if (*junk != '\0' || i < 0)
|
||||
bb_error_msg_and_die("invalid byte or field list");
|
||||
return i;
|
||||
}
|
||||
|
||||
static const char * const _op_on_field = " only when operating on fields";
|
||||
static const char _op_on_field[] = " only when operating on fields";
|
||||
|
||||
int cut_main(int argc, char **argv)
|
||||
{
|
||||
@@ -231,7 +221,7 @@ int cut_main(int argc, char **argv)
|
||||
} else if (strlen(ntok) == 0) {
|
||||
s = BOL;
|
||||
} else {
|
||||
s = getval(ntok);
|
||||
s = xatoi_u(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)
|
||||
@@ -245,7 +235,7 @@ int cut_main(int argc, char **argv)
|
||||
} else if (strlen(ntok) == 0) {
|
||||
e = EOL;
|
||||
} else {
|
||||
e = getval(ntok);
|
||||
e = xatoi_u(ntok);
|
||||
/* if the user specified and end position of 0, that means "til the
|
||||
* end of the line */
|
||||
if (e == 0)
|
||||
|
||||
@@ -62,19 +62,19 @@ int dd_main(int argc, char **argv)
|
||||
for (n = 1; n < argc; n++) {
|
||||
// FIXME: make them capable of eating LARGE numbers
|
||||
if (ENABLE_FEATURE_DD_IBS_OBS && !strncmp("ibs=", argv[n], 4)) {
|
||||
ibs = bb_xparse_number(argv[n]+4, dd_suffixes);
|
||||
ibs = xatoul_sfx(argv[n]+4, dd_suffixes);
|
||||
flags |= twobufs_flag;
|
||||
} else if (ENABLE_FEATURE_DD_IBS_OBS && !strncmp("obs=", argv[n], 4)) {
|
||||
obs = bb_xparse_number(argv[n]+4, dd_suffixes);
|
||||
obs = xatoul_sfx(argv[n]+4, dd_suffixes);
|
||||
flags |= twobufs_flag;
|
||||
} else if (!strncmp("bs=", argv[n], 3))
|
||||
ibs = obs = bb_xparse_number(argv[n]+3, dd_suffixes);
|
||||
ibs = obs = xatoul_sfx(argv[n]+3, dd_suffixes);
|
||||
else if (!strncmp("count=", argv[n], 6))
|
||||
count = bb_xparse_number(argv[n]+6, dd_suffixes);
|
||||
count = xatoul_sfx(argv[n]+6, dd_suffixes);
|
||||
else if (!strncmp("seek=", argv[n], 5))
|
||||
seek = bb_xparse_number(argv[n]+5, dd_suffixes);
|
||||
seek = xatoul_sfx(argv[n]+5, dd_suffixes);
|
||||
else if (!strncmp("skip=", argv[n], 5))
|
||||
skip = bb_xparse_number(argv[n]+5, dd_suffixes);
|
||||
skip = xatoul_sfx(argv[n]+5, dd_suffixes);
|
||||
else if (!strncmp("if=", argv[n], 3))
|
||||
infile = argv[n]+3;
|
||||
else if (!strncmp("of=", argv[n], 3))
|
||||
|
||||
@@ -1192,7 +1192,7 @@ int diff_main(int argc, char **argv)
|
||||
|
||||
context = 3; /* This is the default number of lines of context. */
|
||||
if (cmd_flags & FLAG_U) {
|
||||
context = bb_xgetlarg(U_opt, 10, 1, INT_MAX);
|
||||
context = xatoul_range(U_opt, 1, INT_MAX);
|
||||
}
|
||||
argc -= optind;
|
||||
argv += optind;
|
||||
|
||||
@@ -215,7 +215,7 @@ int du_main(int argc, char **argv)
|
||||
one_file_system = opt & (1 << 5); /* -x opt */
|
||||
if((opt & (1 << 6))) {
|
||||
/* -d opt */
|
||||
max_print_depth = bb_xgetularg10_bnd(smax_print_depth, 0, INT_MAX);
|
||||
max_print_depth = xatoi_u(smax_print_depth);
|
||||
}
|
||||
if((opt & (1 << 7))) {
|
||||
/* -l opt */
|
||||
|
||||
@@ -62,7 +62,7 @@ int fold_main(int argc, char **argv)
|
||||
|
||||
flags = getopt32(argc, argv, "bsw:", &w_opt);
|
||||
if (flags & FLAG_WIDTH)
|
||||
width = bb_xgetlarg(w_opt, 10, 1, 10000);
|
||||
width = xatoul_range(w_opt, 1, 10000);
|
||||
|
||||
argv += optind;
|
||||
if (!*argv) {
|
||||
|
||||
@@ -64,32 +64,30 @@ int head_main(int argc, char **argv)
|
||||
while ((opt = getopt(argc, argv, head_opts)) > 0) {
|
||||
switch (opt) {
|
||||
#if ENABLE_FEATURE_FANCY_HEAD
|
||||
case 'q':
|
||||
header_threshhold = INT_MAX;
|
||||
break;
|
||||
case 'v':
|
||||
header_threshhold = -1;
|
||||
break;
|
||||
case 'c':
|
||||
count_bytes = 1;
|
||||
/* fall through */
|
||||
case 'q':
|
||||
header_threshhold = INT_MAX;
|
||||
break;
|
||||
case 'v':
|
||||
header_threshhold = -1;
|
||||
break;
|
||||
case 'c':
|
||||
count_bytes = 1;
|
||||
/* fall through */
|
||||
#endif
|
||||
case 'n':
|
||||
p = optarg;
|
||||
case 'n':
|
||||
p = optarg;
|
||||
#if !ENABLE_DEBUG_YANK_SUSv2 || ENABLE_FEATURE_FANCY_HEAD
|
||||
GET_COUNT:
|
||||
GET_COUNT:
|
||||
#endif
|
||||
|
||||
#if !ENABLE_FEATURE_FANCY_HEAD
|
||||
count = bb_xgetularg10(p);
|
||||
count = xatoul(p);
|
||||
#else
|
||||
count = bb_xgetularg_bnd_sfx(p, 10,
|
||||
0, ULONG_MAX,
|
||||
head_suffixes);
|
||||
count = xatoul_sfx(p, head_suffixes);
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
bb_show_usage();
|
||||
break;
|
||||
default:
|
||||
bb_show_usage();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -163,8 +163,8 @@ static int list_single(struct dnode *);
|
||||
static unsigned int all_fmt;
|
||||
|
||||
#ifdef CONFIG_FEATURE_AUTOWIDTH
|
||||
static int terminal_width = TERMINAL_WIDTH;
|
||||
static unsigned short tabstops = COLUMN_GAP;
|
||||
static unsigned terminal_width = TERMINAL_WIDTH;
|
||||
static unsigned tabstops = COLUMN_GAP;
|
||||
#else
|
||||
#define tabstops COLUMN_GAP
|
||||
#define terminal_width TERMINAL_WIDTH
|
||||
@@ -915,10 +915,10 @@ int ls_main(int argc, char **argv)
|
||||
#endif
|
||||
);
|
||||
if (tabstops_str) {
|
||||
tabstops = atoi(tabstops_str);
|
||||
tabstops = xatou(tabstops_str);
|
||||
}
|
||||
if (terminal_width_str) {
|
||||
terminal_width = atoi(terminal_width_str);
|
||||
terminal_width = xatou(terminal_width_str);
|
||||
}
|
||||
#else
|
||||
opt = getopt32(argc, argv, ls_options
|
||||
|
||||
@@ -9,11 +9,8 @@
|
||||
|
||||
/* BB_AUDIT SUSv3 N/A -- Matches GNU behavior. */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/sysmacros.h> // For makedev
|
||||
#include <unistd.h>
|
||||
|
||||
#include "busybox.h"
|
||||
#include "libcoreutils/coreutils.h"
|
||||
|
||||
@@ -37,8 +34,8 @@ int mknod_main(int argc, char **argv)
|
||||
if ((*name != 'p') && ((argc -= 2) == 2)) {
|
||||
/* Autodetect what the system supports; thexe macros should
|
||||
* optimize out to two constants. */
|
||||
dev = makedev(bb_xgetularg10_bnd(argv[2], 0, major(UINT_MAX)),
|
||||
bb_xgetularg10_bnd(argv[3], 0, minor(UINT_MAX)));
|
||||
dev = makedev(xatoul_range(argv[2], 0, major(UINT_MAX)),
|
||||
xatoul_range(argv[3], 0, minor(UINT_MAX)));
|
||||
}
|
||||
|
||||
if (argc == 2) {
|
||||
|
||||
@@ -52,7 +52,7 @@ int nice_main(int argc, char **argv)
|
||||
if (argc < 4) { /* Missing priority and/or utility! */
|
||||
bb_show_usage();
|
||||
}
|
||||
adjustment = bb_xgetlarg(argv[1], 10, INT_MIN, INT_MAX);
|
||||
adjustment = xatoi(argv[1]);
|
||||
argv += 2;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
%b = print an argument string, interpreting backslash escapes
|
||||
|
||||
The `format' argument is re-used as many times as necessary
|
||||
The 'format' argument is re-used as many times as necessary
|
||||
to convert all of the given arguments.
|
||||
|
||||
David MacKenzie <djm@gnu.ai.mit.edu> */
|
||||
@@ -57,7 +57,7 @@ static void multiconvert(char *arg, void *result, converter convert)
|
||||
fputs(arg, stderr);
|
||||
}
|
||||
|
||||
static unsigned long xstrtoul(char *arg)
|
||||
static unsigned long my_xstrtoul(char *arg)
|
||||
{
|
||||
unsigned long result;
|
||||
|
||||
@@ -65,14 +65,14 @@ static unsigned long xstrtoul(char *arg)
|
||||
return result;
|
||||
}
|
||||
|
||||
static long xstrtol(char *arg)
|
||||
static long my_xstrtol(char *arg)
|
||||
{
|
||||
long result;
|
||||
multiconvert(arg, &result, (converter)safe_strtol);
|
||||
return result;
|
||||
}
|
||||
|
||||
static double xstrtod(char *arg)
|
||||
static double my_xstrtod(char *arg)
|
||||
{
|
||||
double result;
|
||||
multiconvert(arg, &result, (converter)safe_strtod);
|
||||
@@ -120,13 +120,13 @@ int printf_main(int argc, char **argv)
|
||||
}
|
||||
|
||||
/* Print the text in FORMAT, using ARGV (with ARGC elements) for
|
||||
arguments to any `%' directives.
|
||||
arguments to any '%' directives.
|
||||
Return the number of elements of ARGV used. */
|
||||
|
||||
static int print_formatted(char *format, int argc, char **argv)
|
||||
{
|
||||
int save_argc = argc; /* Preserve original value. */
|
||||
char *f; /* Pointer into `format'. */
|
||||
char *f; /* Pointer into 'format'. */
|
||||
char *direc_start; /* Start of % directive. */
|
||||
size_t direc_length; /* Length of % directive. */
|
||||
int field_width; /* Arg to first '*', or -1 if none. */
|
||||
@@ -158,7 +158,7 @@ static int print_formatted(char *format, int argc, char **argv)
|
||||
++f;
|
||||
++direc_length;
|
||||
if (argc > 0) {
|
||||
field_width = xstrtoul(*argv);
|
||||
field_width = my_xstrtoul(*argv);
|
||||
++argv;
|
||||
--argc;
|
||||
} else
|
||||
@@ -175,7 +175,7 @@ static int print_formatted(char *format, int argc, char **argv)
|
||||
++f;
|
||||
++direc_length;
|
||||
if (argc > 0) {
|
||||
precision = xstrtoul(*argv);
|
||||
precision = my_xstrtoul(*argv);
|
||||
++argv;
|
||||
--argc;
|
||||
} else
|
||||
@@ -235,14 +235,14 @@ print_direc(char *start, size_t length, int field_width, int precision,
|
||||
case 'i':
|
||||
if (field_width < 0) {
|
||||
if (precision < 0)
|
||||
printf(p, xstrtol(argument));
|
||||
printf(p, my_xstrtol(argument));
|
||||
else
|
||||
printf(p, precision, xstrtol(argument));
|
||||
printf(p, precision, my_xstrtol(argument));
|
||||
} else {
|
||||
if (precision < 0)
|
||||
printf(p, field_width, xstrtol(argument));
|
||||
printf(p, field_width, my_xstrtol(argument));
|
||||
else
|
||||
printf(p, field_width, precision, xstrtol(argument));
|
||||
printf(p, field_width, precision, my_xstrtol(argument));
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -252,14 +252,14 @@ print_direc(char *start, size_t length, int field_width, int precision,
|
||||
case 'X':
|
||||
if (field_width < 0) {
|
||||
if (precision < 0)
|
||||
printf(p, xstrtoul(argument));
|
||||
printf(p, my_xstrtoul(argument));
|
||||
else
|
||||
printf(p, precision, xstrtoul(argument));
|
||||
printf(p, precision, my_xstrtoul(argument));
|
||||
} else {
|
||||
if (precision < 0)
|
||||
printf(p, field_width, xstrtoul(argument));
|
||||
printf(p, field_width, my_xstrtoul(argument));
|
||||
else
|
||||
printf(p, field_width, precision, xstrtoul(argument));
|
||||
printf(p, field_width, precision, my_xstrtoul(argument));
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -270,14 +270,14 @@ print_direc(char *start, size_t length, int field_width, int precision,
|
||||
case 'G':
|
||||
if (field_width < 0) {
|
||||
if (precision < 0)
|
||||
printf(p, xstrtod(argument));
|
||||
printf(p, my_xstrtod(argument));
|
||||
else
|
||||
printf(p, precision, xstrtod(argument));
|
||||
printf(p, precision, my_xstrtod(argument));
|
||||
} else {
|
||||
if (precision < 0)
|
||||
printf(p, field_width, xstrtod(argument));
|
||||
printf(p, field_width, my_xstrtod(argument));
|
||||
else
|
||||
printf(p, field_width, precision, xstrtod(argument));
|
||||
printf(p, field_width, precision, my_xstrtod(argument));
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
#include "busybox.h"
|
||||
|
||||
#ifdef CONFIG_FEATURE_FANCY_SLEEP
|
||||
static const struct suffix_mult sleep_suffixes[] = {
|
||||
static const struct suffix_mult sfx[] = {
|
||||
{ "s", 1 },
|
||||
{ "m", 60 },
|
||||
{ "h", 60*60 },
|
||||
@@ -46,9 +46,7 @@ int sleep_main(int argc, char **argv)
|
||||
++argv;
|
||||
duration = 0;
|
||||
do {
|
||||
duration += bb_xgetularg_bnd_sfx(*argv, 10,
|
||||
0, UINT_MAX-duration,
|
||||
sleep_suffixes);
|
||||
duration += xatoul_range_sfx(*argv, 0, UINT_MAX-duration, sfx);
|
||||
} while (*++argv);
|
||||
|
||||
#else /* CONFIG_FEATURE_FANCY_SLEEP */
|
||||
@@ -57,11 +55,7 @@ int sleep_main(int argc, char **argv)
|
||||
bb_show_usage();
|
||||
}
|
||||
|
||||
#if UINT_MAX == ULONG_MAX
|
||||
duration = bb_xgetularg10(argv[1]);
|
||||
#else
|
||||
duration = bb_xgetularg10_bnd(argv[1], 0, UINT_MAX);
|
||||
#endif
|
||||
duration = xatou(argv[1]);
|
||||
|
||||
#endif /* CONFIG_FEATURE_FANCY_SLEEP */
|
||||
|
||||
|
||||
@@ -370,9 +370,9 @@ enum {
|
||||
};
|
||||
|
||||
/* The width of the screen, for output wrapping */
|
||||
static int max_col;
|
||||
static unsigned max_col = 80; /* default */
|
||||
/* Current position, to know when to wrap */
|
||||
static int current_col;
|
||||
static unsigned current_col;
|
||||
static const char *device_name = bb_msg_standard_input;
|
||||
|
||||
/* Return a string that is the printable representation of character CH */
|
||||
@@ -422,7 +422,7 @@ static tcflag_t *mode_type_flag(unsigned type, const struct termios *mode)
|
||||
|
||||
static speed_t string_to_baud_or_die(const char *arg)
|
||||
{
|
||||
return tty_value_to_baud(bb_xparse_number(arg, 0));
|
||||
return tty_value_to_baud(xatou(arg));
|
||||
}
|
||||
|
||||
static void set_speed_or_die(enum speed_setting type, const char *arg,
|
||||
@@ -556,9 +556,8 @@ static inline void display_window_size(int fancy) {}
|
||||
|
||||
#endif /* !TIOCGWINSZ */
|
||||
|
||||
static int screen_columns(void)
|
||||
static int screen_columns_or_die(void)
|
||||
{
|
||||
int columns;
|
||||
const char *s;
|
||||
|
||||
#ifdef TIOCGWINSZ
|
||||
@@ -574,11 +573,10 @@ static int screen_columns(void)
|
||||
return win.ws_col;
|
||||
#endif
|
||||
|
||||
columns = 80;
|
||||
if ((s = getenv("COLUMNS"))) {
|
||||
columns = atoi(s);
|
||||
}
|
||||
return columns;
|
||||
s = getenv("COLUMNS");
|
||||
if (s)
|
||||
return xatoi_u(s);
|
||||
return 80;
|
||||
}
|
||||
|
||||
static const struct suffix_mult stty_suffixes[] = {
|
||||
@@ -745,14 +743,14 @@ end_option:
|
||||
#ifdef HAVE_C_LINE
|
||||
case param_line:
|
||||
# ifndef TIOCGWINSZ
|
||||
bb_xparse_number(argnext, stty_suffixes);
|
||||
xatoul_range_sfx(argnext, 1, INT_MAX, stty_suffixes);
|
||||
break;
|
||||
# endif /* else fall-through */
|
||||
#endif
|
||||
#ifdef TIOCGWINSZ
|
||||
case param_rows:
|
||||
case param_cols:
|
||||
bb_xparse_number(argnext, stty_suffixes);
|
||||
xatoul_range_sfx(argnext, 1, INT_MAX, stty_suffixes);
|
||||
break;
|
||||
case param_size:
|
||||
#endif
|
||||
@@ -802,7 +800,7 @@ end_option:
|
||||
perror_on_device_and_die("%s");
|
||||
|
||||
if (verbose_output || recoverable_output || noargs) {
|
||||
max_col = screen_columns();
|
||||
max_col = screen_columns_or_die();
|
||||
output_func(&mode);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
@@ -846,24 +844,22 @@ end_option:
|
||||
switch (param) {
|
||||
#ifdef HAVE_C_LINE
|
||||
case param_line:
|
||||
mode.c_line = bb_xparse_number(argnext, stty_suffixes);
|
||||
mode.c_line = xatoul_sfx(argnext, stty_suffixes);
|
||||
require_set_attr = 1;
|
||||
break;
|
||||
#endif
|
||||
#ifdef TIOCGWINSZ
|
||||
case param_cols:
|
||||
set_window_size(-1, (int) bb_xparse_number(argnext, stty_suffixes));
|
||||
set_window_size(-1, xatoul_sfx(argnext, stty_suffixes));
|
||||
break;
|
||||
case param_size:
|
||||
max_col = screen_columns();
|
||||
display_window_size(0);
|
||||
break;
|
||||
case param_rows:
|
||||
set_window_size((int) bb_xparse_number(argnext, stty_suffixes), -1);
|
||||
set_window_size(xatoul_sfx(argnext, stty_suffixes), -1);
|
||||
break;
|
||||
#endif
|
||||
case param_speed:
|
||||
max_col = screen_columns();
|
||||
display_speed(&mode, 0);
|
||||
break;
|
||||
case param_ispeed:
|
||||
@@ -1096,7 +1092,7 @@ static void set_control_char_or_die(const struct control_info *info,
|
||||
unsigned char value;
|
||||
|
||||
if (info->name == stty_min || info->name == stty_time)
|
||||
value = bb_xparse_number(arg, stty_suffixes);
|
||||
value = xatoul_range_sfx(arg, 0, 0xff, stty_suffixes);
|
||||
else if (arg[0] == '\0' || arg[1] == '\0')
|
||||
value = arg[0];
|
||||
else if (streq(arg, "^-") || streq(arg, "undef"))
|
||||
@@ -1106,7 +1102,7 @@ static void set_control_char_or_die(const struct control_info *info,
|
||||
if (arg[1] == '?')
|
||||
value = 127;
|
||||
} else
|
||||
value = bb_xparse_number(arg, stty_suffixes);
|
||||
value = xatoul_range_sfx(arg, 0, 0xff, stty_suffixes);
|
||||
mode->c_cc[info->offset] = value;
|
||||
}
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@ int tail_main(int argc, char **argv)
|
||||
#if !ENABLE_DEBUG_YANK_SUSv2 || ENABLE_FEATURE_FANCY_TAIL
|
||||
GET_COUNT:
|
||||
#endif
|
||||
count = bb_xgetlarg10_sfx(optarg, tail_suffixes);
|
||||
count = xatol_sfx(optarg, tail_suffixes);
|
||||
/* Note: Leading whitespace is an error trapped above. */
|
||||
if (*optarg == '+') {
|
||||
from_top = 1;
|
||||
@@ -148,7 +148,7 @@ int tail_main(int argc, char **argv)
|
||||
header_threshhold = INT_MAX;
|
||||
break;
|
||||
case 's':
|
||||
sleep_period =bb_xgetularg10_bnd(optarg, 0, UINT_MAX);
|
||||
sleep_period = xatou(optarg);
|
||||
break;
|
||||
case 'v':
|
||||
header_threshhold = 0;
|
||||
|
||||
@@ -37,7 +37,7 @@ int uniq_main(int argc, char **argv)
|
||||
|
||||
while ((opt = getopt(argc, argv, uniq_opts)) > 0) {
|
||||
if ((opt == 'f') || (opt == 's')) {
|
||||
int t = bb_xgetularg10(optarg);
|
||||
int t = xatoul(optarg);
|
||||
if (opt == 'f') {
|
||||
skip_fields = t;
|
||||
} else {
|
||||
|
||||
@@ -20,7 +20,7 @@ int usleep_main(int argc, char **argv)
|
||||
bb_show_usage();
|
||||
}
|
||||
|
||||
if (usleep(bb_xgetularg10_bnd(argv[1], 0, UINT_MAX))) {
|
||||
if (usleep(xatou(argv[1]))) {
|
||||
bb_perror_nomsg_and_die();
|
||||
}
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ int watch_main(int argc, char **argv)
|
||||
/* don't use getopt, because it permutes the arguments */
|
||||
++argv;
|
||||
if ((argc > 3) && argv[0][0] == '-' && argv[0][1] == 'n') {
|
||||
period = bb_xgetularg10_bnd(argv[1], 1, UINT_MAX);
|
||||
period = xatou(argv[1]);
|
||||
argv += 2;
|
||||
}
|
||||
watched_argv = argv;
|
||||
|
||||
Reference in New Issue
Block a user