attempt to regularize atoi mess.

This commit is contained in:
Denis Vlasenko
2006-10-08 12:49:22 +00:00
parent 5625415085
commit 1385899416
98 changed files with 814 additions and 860 deletions

View File

@@ -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);

View File

@@ -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)

View File

@@ -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))

View File

@@ -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;

View File

@@ -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 */

View File

@@ -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) {

View File

@@ -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();
}
}

View File

@@ -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

View File

@@ -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) {

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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 */

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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();
}

View File

@@ -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;