attempt to regularize atoi mess.
diff --git a/networking/arping.c b/networking/arping.c
index 1ff6f90..b960598 100644
--- a/networking/arping.c
+++ b/networking/arping.c
@@ -41,8 +41,8 @@
static int cfg;
static int s;
-static int count = -1;
-static int timeout;
+static unsigned count = UINT_MAX;
+static unsigned timeout;
static int sent;
static int brd_sent;
static int received;
@@ -276,9 +276,9 @@
&_count, &_timeout, &device, &source);
cfg |= opt & 0x3f; /* set respective flags */
if (opt & 0x40) /* -c: count */
- count = atoi(_count);
+ count = xatou(_count);
if (opt & 0x80) /* -w: timeout */
- timeout = atoi(_timeout);
+ timeout = xatoul_range(_timeout, 0, INT_MAX/2000);
if (opt & 0x100) { /* -i: interface */
if (strlen(device) > IF_NAMESIZE) {
bb_error_msg_and_die("interface name '%s' is too long",
diff --git a/networking/ftpgetput.c b/networking/ftpgetput.c
index 4928541..902528f 100644
--- a/networking/ftpgetput.c
+++ b/networking/ftpgetput.c
@@ -42,15 +42,15 @@
char *buf_ptr;
if (fgets(buf, 510, stream) == NULL) {
- bb_perror_msg_and_die("fgets()");
+ bb_perror_msg_and_die("fgets");
}
buf_ptr = strstr(buf, "\r\n");
if (buf_ptr) {
*buf_ptr = '\0';
}
- } while (! isdigit(buf[0]) || buf[3] != ' ');
+ } while (!isdigit(buf[0]) || buf[3] != ' ');
- return atoi(buf);
+ return xatou(buf);
}
static int xconnect_ftpdata(ftp_host_info_t *server, const char *buf)
@@ -60,14 +60,14 @@
buf_ptr = strrchr(buf, ',');
*buf_ptr = '\0';
- port_num = atoi(buf_ptr + 1);
+ port_num = xatoul_range(buf_ptr + 1, 0, 255);
buf_ptr = strrchr(buf, ',');
*buf_ptr = '\0';
- port_num += atoi(buf_ptr + 1) * 256;
+ port_num += xatoul_range(buf_ptr + 1, 0, 255) * 256;
- server->s_in->sin_port=htons(port_num);
- return(xconnect(server->s_in));
+ server->s_in->sin_port = htons(port_num);
+ return xconnect(server->s_in);
}
static FILE *ftp_login(ftp_host_info_t *server)
diff --git a/networking/httpd.c b/networking/httpd.c
index 0e471ba..f3fe49c 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -1951,7 +1951,7 @@
#endif
#if ENABLE_FEATURE_HTTPD_WITHOUT_INETD
if (opt & OPT_PORT)
- config->port = bb_xgetlarg(s_port, 10, 1, 0xffff);
+ config->port = xatou16(s_port);
#if ENABLE_FEATURE_HTTPD_SETUID
if (opt & OPT_SETUID) {
char *e;
diff --git a/networking/ifconfig.c b/networking/ifconfig.c
index 4d346c4..59b6f0a 100644
--- a/networking/ifconfig.c
+++ b/networking/ifconfig.c
@@ -379,7 +379,8 @@
safe_strncpy(host, *argv, (sizeof host));
#ifdef CONFIG_FEATURE_IPV6
- if ((prefix = strchr(host, '/'))) {
+ prefix = strchr(host, '/');
+ if (prefix) {
if (safe_strtoi(prefix + 1, &prefix_len) ||
(prefix_len < 0) || (prefix_len > 128))
{
diff --git a/networking/inetd.c b/networking/inetd.c
index e22115a..9664253 100644
--- a/networking/inetd.c
+++ b/networking/inetd.c
@@ -149,8 +149,6 @@
#define _PATH_INETDPID "/var/run/inetd.pid"
-#define TOOMANY 0 /* don't start more than TOOMANY */
-
#define CNT_INTVL 60 /* servers in CNT_INTVL sec. */
#define RETRYTIME (60*10) /* retry after bind or server fail */
@@ -297,7 +295,7 @@
static int global_queuelen = 128;
static int nsock, maxsock;
static fd_set allsock;
-static int toomany = TOOMANY;
+static int toomany;
static int timingout;
static struct servent *sp;
static uid_t uid;
@@ -588,10 +586,10 @@
sep = new_servtab();
/* memset(sep, 0, sizeof *sep); */
-more:
+ more:
/* freeconfig(sep); */
- while ((cp = nextline()) && *cp == '#');
+ while ((cp = nextline()) && *cp == '#') /* skip comment line */;
if (cp == NULL) {
/* free(sep); */
return NULL;
@@ -680,7 +678,7 @@
} else if (*ccp != '\0')
goto badafterall;
#else
- bb_error_msg("%s: rpc services not supported", sep->se_service);
+ bb_error_msg("%s: rpc services not supported", sep->se_service);
#endif
}
}
@@ -692,7 +690,7 @@
char *s = strchr(arg, '.');
if (s) {
*s++ = '\0';
- sep->se_max = atoi(s);
+ sep->se_max = xatoi(s);
} else
sep->se_max = toomany;
}
@@ -928,7 +926,7 @@
*/
if (
#ifdef INETD_FEATURE_ENABLED
- cp->se_bi == 0 &&
+ cp->se_bi == 0 &&
#endif
(sep->se_wait == 1 || cp->se_wait == 0))
sep->se_wait = cp->se_wait;
@@ -974,7 +972,7 @@
#ifdef CONFIG_FEATURE_INETD_RPC
if (isrpcservice(sep)) {
struct rpcent *rp;
-
+ // FIXME: atoi_or_else(str, 0) would be handy here
sep->se_rpcprog = atoi(sep->se_service);
if (sep->se_rpcprog == 0) {
rp = getrpcbyname(sep->se_service);
@@ -990,9 +988,9 @@
register_rpc(sep);
} else
#endif
- {
+ {
u_short port = htons(atoi(sep->se_service));
-
+ // FIXME: atoi_or_else(str, 0) would be handy here
if (!port) {
/*XXX*/ strncpy(protoname, sep->se_proto, sizeof(protoname));
if (isdigit(protoname[strlen(protoname) - 1]))
@@ -1255,13 +1253,7 @@
opt = getopt32(argc, argv, "R:f", &stoomany);
if(opt & 1) {
- char *e;
-
- toomany = strtoul(stoomany, &e, 0);
- if (!(toomany >= 0 && *e == '\0')) {
- toomany = TOOMANY;
- bb_perror_msg("-R %s: bad value for service invocation rate", stoomany);
- }
+ toomany = xatoi_u(stoomany);
}
argc -= optind;
argv += optind;
@@ -1317,7 +1309,6 @@
sigaddset(&sa.sa_mask, SIGHUP);
sa.sa_handler = retry;
sigaction(SIGALRM, &sa, NULL);
- /* doconfig(); */
config(SIGHUP);
sa.sa_handler = config;
sigaction(SIGHUP, &sa, NULL);
diff --git a/networking/interface.c b/networking/interface.c
index c3cc7c0..8e2498d 100644
--- a/networking/interface.c
+++ b/networking/interface.c
@@ -363,7 +363,7 @@
}
if (isdigit(*a) && isdigit(*b)) {
- return atoi(a_ptr) > atoi(b_ptr) ? 1 : -1;
+ return xatoul(a_ptr) > xatoul(b_ptr) ? 1 : -1;
}
return *a - *b;
}
diff --git a/networking/ipcalc.c b/networking/ipcalc.c
index 576dfc8..909373c 100644
--- a/networking/ipcalc.c
+++ b/networking/ipcalc.c
@@ -18,8 +18,6 @@
#include <sys/socket.h>
#include <arpa/inet.h>
-#define IPCALC_MSG(CMD,ALTCMD) if (mode & SILENT) {ALTCMD;} else {CMD;}
-
#define CLASS_A_NETMASK ntohl(0xFF000000)
#define CLASS_B_NETMASK ntohl(0xFFFF0000)
#define CLASS_C_NETMASK ntohl(0xFFFFFF00)
@@ -56,6 +54,7 @@
int get_prefix(unsigned long netmask);
#endif
+
#define NETMASK 0x01
#define BROADCAST 0x02
#define NETWORK 0x04
@@ -78,12 +77,9 @@
#else
#define long_options 0
#endif
-
-
-
int ipcalc_main(int argc, char **argv)
{
- unsigned long mode;
+ unsigned opt;
int have_netmask = 0;
in_addr_t netmask, broadcast, network, ipaddr;
struct in_addr a;
@@ -92,17 +88,18 @@
if (ENABLE_FEATURE_IPCALC_LONG_OPTIONS)
applet_long_options = long_options;
- mode = getopt32(argc, argv, "mbn" USE_FEATURE_IPCALC_FANCY("phs"));
-
+ opt = getopt32(argc, argv, "mbn" USE_FEATURE_IPCALC_FANCY("phs"));
argc -= optind;
argv += optind;
- if (mode & (BROADCAST | NETWORK | NETPREFIX)) {
+ if (opt & (BROADCAST | NETWORK | NETPREFIX)) {
if (argc > 2 || argc <= 0)
bb_show_usage();
} else {
if (argc != 1)
bb_show_usage();
}
+ if (opt & SILENT)
+ logmode = LOGMODE_NONE; /* Suppress error_msg() output */
ipstr = argv[0];
if (ENABLE_FEATURE_IPCALC_FANCY) {
@@ -111,17 +108,13 @@
prefixstr = ipstr;
- while(*prefixstr) {
+ while (*prefixstr) {
if (*prefixstr == '/') {
*prefixstr = (char)0;
prefixstr++;
if (*prefixstr) {
- unsigned int msk;
-
- if (safe_strtoul(prefixstr, &netprefix) || netprefix > 32) {
- IPCALC_MSG(bb_error_msg_and_die("bad IP prefix: %s", prefixstr),
- exit(EXIT_FAILURE));
- }
+ unsigned msk;
+ netprefix = xatoul_range(prefixstr, 0, 32);
netmask = 0;
msk = 0x80000000;
while (netprefix > 0) {
@@ -142,21 +135,18 @@
ipaddr = inet_aton(ipstr, &a);
if (ipaddr == 0) {
- IPCALC_MSG(bb_error_msg_and_die("bad IP address: %s", argv[0]),
- exit(EXIT_FAILURE));
+ bb_error_msg_and_die("bad IP address: %s", argv[0]);
}
ipaddr = a.s_addr;
if (argc == 2) {
if (ENABLE_FEATURE_IPCALC_FANCY && have_netmask) {
- IPCALC_MSG(bb_error_msg_and_die("Use prefix or netmask, not both"),
- exit(EXIT_FAILURE));
+ bb_error_msg_and_die("use prefix or netmask, not both");
}
netmask = inet_aton(argv[1], &a);
if (netmask == 0) {
- IPCALC_MSG(bb_error_msg_and_die("bad netmask: %s", argv[1]),
- exit(EXIT_FAILURE));
+ bb_error_msg_and_die("bad netmask: %s", argv[1]);
}
netmask = a.s_addr;
} else {
@@ -166,34 +156,32 @@
netmask = get_netmask(ipaddr);
}
- if (mode & NETMASK) {
+ if (opt & NETMASK) {
printf("NETMASK=%s\n", inet_ntoa((*(struct in_addr *) &netmask)));
}
- if (mode & BROADCAST) {
+ if (opt & BROADCAST) {
broadcast = (ipaddr & netmask) | ~netmask;
printf("BROADCAST=%s\n", inet_ntoa((*(struct in_addr *) &broadcast)));
}
- if (mode & NETWORK) {
+ if (opt & NETWORK) {
network = ipaddr & netmask;
printf("NETWORK=%s\n", inet_ntoa((*(struct in_addr *) &network)));
}
if (ENABLE_FEATURE_IPCALC_FANCY) {
- if (mode & NETPREFIX) {
+ if (opt & NETPREFIX) {
printf("PREFIX=%i\n", get_prefix(netmask));
}
- if (mode & HOSTNAME) {
+ if (opt & HOSTNAME) {
struct hostent *hostinfo;
int x;
hostinfo = gethostbyaddr((char *) &ipaddr, sizeof(ipaddr), AF_INET);
if (!hostinfo) {
- IPCALC_MSG(bb_herror_msg_and_die(
- "cannot find hostname for %s", argv[0]),);
- exit(EXIT_FAILURE);
+ bb_herror_msg_and_die("cannot find hostname for %s", argv[0]);
}
for (x = 0; hostinfo->h_name[x]; x++) {
hostinfo->h_name[x] = tolower(hostinfo->h_name[x]);
diff --git a/networking/nc.c b/networking/nc.c
index f8b3fb2..bde5e66 100644
--- a/networking/nc.c
+++ b/networking/nc.c
@@ -11,13 +11,15 @@
static void timeout(int signum)
{
- bb_error_msg_and_die("Timed out");
+ bb_error_msg_and_die("timed out");
}
int nc_main(int argc, char **argv)
{
- int do_listen = 0, lport = 0, delay = 0, wsecs = 0, execflag = 0, opt,
- sfd = 0, cfd;
+ int sfd = 0, cfd;
+ unsigned opt;
+ unsigned lport = 0, wsecs = 0, delay = 0;
+ unsigned do_listen = 0, execflag = 0;
struct sockaddr_in address;
struct hostent *hostinfo;
fd_set readfds, testfds;
@@ -30,8 +32,8 @@
if (ENABLE_NC_SERVER && opt=='l') do_listen++;
else if (ENABLE_NC_SERVER && opt=='p')
lport = bb_lookup_port(optarg, "tcp", 0);
- else if (ENABLE_NC_EXTRA && opt=='w') wsecs = atoi(optarg);
- else if (ENABLE_NC_EXTRA && opt=='i') delay = atoi(optarg);
+ else if (ENABLE_NC_EXTRA && opt=='w') wsecs = xatou(optarg);
+ else if (ENABLE_NC_EXTRA && opt=='i') delay = xatou(optarg);
else if (ENABLE_NC_EXTRA && opt=='f') infile = optarg;
else if (ENABLE_NC_EXTRA && opt=='e' && optind!=argc) {
execflag++;
@@ -40,11 +42,10 @@
}
}
-
// For listen or file we need zero arguments, dialout is 2.
// For exec we need at least one more argument at the end, more ok
- opt = (do_listen || infile) ? 0 : 2 + execflag;
+ opt = (do_listen || infile) ? 0 : 2 + execflag;
if (execflag ? argc-optind < opt : argc-optind!=opt ||
(infile && do_listen))
bb_show_usage();
@@ -66,7 +67,6 @@
if (lport != 0) {
address.sin_port = lport;
-
xbind(sfd, (struct sockaddr *) &address, sizeof(address));
}
@@ -83,7 +83,8 @@
fdprintf(2, "%d\n", SWAP_BE16(address.sin_port));
}
repeatyness:
- if ((cfd = accept(sfd, (struct sockaddr *) &address, &addrlen)) < 0)
+ cfd = accept(sfd, (struct sockaddr *) &address, &addrlen);
+ if (cfd < 0)
bb_perror_msg_and_die("accept");
if (!execflag) close(sfd);
@@ -116,10 +117,11 @@
// With more than one -l, repeatedly act as server.
- if (do_listen>1 && vfork()) {
+ if (do_listen > 1 && vfork()) {
// This is a bit weird as cleanup goes, since we wind up with no
// stdin/stdout/stderr. But it's small and shouldn't hurt anything.
// We check for cfd == 0 above.
+ logmode = LOGMODE_NONE;
close(0);
close(1);
close(2);
diff --git a/networking/ping.c b/networking/ping.c
index a81472f..8ca8be9 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -157,9 +157,9 @@
static struct sockaddr_in pingaddr;
static struct sockaddr_in sourceaddr;
static int pingsock = -1;
-static int datalen; /* intentionally uninitialized to work around gcc bug */
+static unsigned datalen; /* intentionally uninitialized to work around gcc bug */
-static long ntransmitted, nreceived, nrepeats, pingcount;
+static unsigned long ntransmitted, nreceived, nrepeats, pingcount;
static int myid, options;
static unsigned long tmin = ULONG_MAX, tmax, tsum;
static char rcvd_tbl[MAX_DUP_CHK / 8];
@@ -179,12 +179,12 @@
signal(SIGINT, SIG_IGN);
printf("\n--- %s ping statistics ---\n", hostent->h_name);
- printf("%ld packets transmitted, ", ntransmitted);
- printf("%ld packets received, ", nreceived);
+ printf("%lu packets transmitted, ", ntransmitted);
+ printf("%lu packets received, ", nreceived);
if (nrepeats)
- printf("%ld duplicates, ", nrepeats);
+ printf("%lu duplicates, ", nrepeats);
if (ntransmitted)
- printf("%ld%% packet loss\n",
+ printf("%lu%% packet loss\n",
(ntransmitted - nreceived) * 100 / ntransmitted);
if (nreceived)
printf("round-trip min/avg/max = %lu.%lu/%lu.%lu/%lu.%lu ms\n",
@@ -427,13 +427,13 @@
if (--argc <= 0)
bb_show_usage();
argv++;
- pingcount = atoi(*argv);
+ pingcount = xatoul(*argv);
break;
case 's':
if (--argc <= 0)
bb_show_usage();
argv++;
- datalen = atoi(*argv);
+ datalen = xatou16(*argv);
break;
case 'I':
if (--argc <= 0)
diff --git a/networking/ping6.c b/networking/ping6.c
index 6079c40..0d6a739 100644
--- a/networking/ping6.c
+++ b/networking/ping6.c
@@ -145,10 +145,10 @@
/* full(er) version */
static struct sockaddr_in6 pingaddr;
static int pingsock = -1;
-static int datalen; /* intentionally uninitialized to work around gcc bug */
+static unsigned datalen; /* intentionally uninitialized to work around gcc bug */
static int if_index;
-static long ntransmitted, nreceived, nrepeats, pingcount;
+static unsigned long ntransmitted, nreceived, nrepeats, pingcount;
static int myid, options;
static unsigned long tmin = ULONG_MAX, tmax, tsum;
static char rcvd_tbl[MAX_DUP_CHK / 8];
@@ -168,12 +168,12 @@
signal(SIGINT, SIG_IGN);
printf("\n--- %s ping statistics ---\n", hostent->h_name);
- printf("%ld packets transmitted, ", ntransmitted);
- printf("%ld packets received, ", nreceived);
+ printf("%lu packets transmitted, ", ntransmitted);
+ printf("%lu packets received, ", nreceived);
if (nrepeats)
- printf("%ld duplicates, ", nrepeats);
+ printf("%lu duplicates, ", nrepeats);
if (ntransmitted)
- printf("%ld%% packet loss\n",
+ printf("%lu%% packet loss\n",
(ntransmitted - nreceived) * 100 / ntransmitted);
if (nreceived)
printf("round-trip min/avg/max = %lu.%lu/%lu.%lu/%lu.%lu ms\n",
@@ -439,13 +439,13 @@
if (--argc <= 0)
bb_show_usage();
argv++;
- pingcount = atoi(*argv);
+ pingcount = xatoul(*argv);
break;
case 's':
if (--argc <= 0)
bb_show_usage();
argv++;
- datalen = atoi(*argv);
+ datalen = xatou16(*argv);
break;
case 'I':
if (--argc <= 0)
diff --git a/networking/route.c b/networking/route.c
index 2e6e017..65b40fc 100644
--- a/networking/route.c
+++ b/networking/route.c
@@ -178,7 +178,7 @@
if(prefix) {
int prefix_len;
- prefix_len = bb_xgetularg10_bnd(prefix+1, 0, 32);
+ prefix_len = xatoul_range(prefix+1, 0, 32);
mask_in_addr(rt) = htonl( ~ (0xffffffffUL >> prefix_len));
*prefix = '\0';
#if HAVE_NEW_ADDRT
@@ -218,7 +218,7 @@
#if HAVE_NEW_ADDRT
if (k == KW_IPVx_METRIC) {
- rt.rt_metric = bb_xgetularg10(args_m1) + 1;
+ rt.rt_metric = xatoul(args_m1) + 1;
continue;
}
#endif
@@ -259,20 +259,20 @@
if (k == KW_IPVx_MSS) { /* Check valid MSS bounds. */
rt.rt_flags |= RTF_MSS;
- rt.rt_mss = bb_xgetularg10_bnd(args_m1, 64, 32768);
+ rt.rt_mss = xatoul_range(args_m1, 64, 32768);
continue;
}
if (k == KW_IPVx_WINDOW) { /* Check valid window bounds. */
rt.rt_flags |= RTF_WINDOW;
- rt.rt_window = bb_xgetularg10_bnd(args_m1, 128, INT_MAX);
+ rt.rt_window = xatoul_range(args_m1, 128, INT_MAX);
continue;
}
#ifdef RTF_IRTT
if (k == KW_IPVx_IRTT) {
rt.rt_flags |= RTF_IRTT;
- rt.rt_irtt = bb_xgetularg10(args_m1);
+ rt.rt_irtt = xatoul(args_m1);
rt.rt_irtt *= (sysconf(_SC_CLK_TCK) / 100); /* FIXME */
#if 0 /* FIXME: do we need to check anything of this? */
if (rt.rt_irtt < 1 || rt.rt_irtt > (120 * HZ)) {
@@ -353,7 +353,7 @@
char *cp;
if ((cp = strchr(target, '/'))) { /* Yes... const to non is ok. */
*cp = 0;
- prefix_len = bb_xgetularg10_bnd(cp+1, 0, 128);
+ prefix_len = xatoul_range(cp+1, 0, 128);
} else {
prefix_len = 128;
}
@@ -384,7 +384,7 @@
}
if (k == KW_IPVx_METRIC) {
- rt.rtmsg_metric = bb_xgetularg10(args_m1);
+ rt.rtmsg_metric = xatoul(args_m1);
continue;
}
diff --git a/networking/telnetd.c b/networking/telnetd.c
index 1c4dede..c6789e1 100644
--- a/networking/telnetd.c
+++ b/networking/telnetd.c
@@ -369,7 +369,7 @@
sockaddr_type sa;
int master_fd;
int on = 1;
- int portnbr = 23;
+ unsigned portnbr = 23;
struct in_addr bind_addr = { .s_addr = 0x0 };
char *opt_portnbr, *opt_bindaddr;
#endif /* CONFIG_FEATURE_TELNETD_INETD */
@@ -393,7 +393,7 @@
//if (opt & 1) // -f
//if (opt & 2) // -l
#ifndef CONFIG_FEATURE_TELNETD_INETD
- if (opt & 4) portnbr = atoi(opt_portnbr); // -p
+ if (opt & 4) portnbr = xatou16(opt_portnbr); // -p
if (opt & 8) // -b
if (inet_aton(opt_bindaddr, &bind_addr) == 0) bb_show_usage();
#endif /* CONFIG_FEATURE_TELNETD_INETD */
diff --git a/networking/tftp.c b/networking/tftp.c
index bfe94ac..6213d66 100644
--- a/networking/tftp.c
+++ b/networking/tftp.c
@@ -373,7 +373,7 @@
res = tftp_option_get(&buf[2], len - 2, OPTION_BLOCKSIZE);
if (res) {
- int blksize = atoi(res);
+ int blksize = xatoi_u(res);
if (tftp_blocksize_check(blksize, tftp_bufsize - 4)) {
@@ -516,7 +516,7 @@
#ifdef CONFIG_FEATURE_TFTP_BLOCKSIZE
if (sblocksize) {
- blocksize = atoi(sblocksize);
+ blocksize = xatoi_u(sblocksize);
if (!tftp_blocksize_check(blocksize, 0)) {
return EXIT_FAILURE;
}
diff --git a/networking/traceroute.c b/networking/traceroute.c
index 4af5236..84ce8ae 100644
--- a/networking/traceroute.c
+++ b/networking/traceroute.c
@@ -416,7 +416,7 @@
++al;
++nipaddr;
}
- if(nipaddr == 0)
+ if (nipaddr == 0)
bb_error_msg_and_die ("Can't find any network interfaces");
(void)close(fd);
@@ -494,34 +494,6 @@
*/
-/* String to value with optional min and max. Handles decimal and hex. */
-static int
-str2val(const char *str, const char *what, int mi, int ma)
-{
- const char *cp;
- int val;
- char *ep;
-
- if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X')) {
- cp = str + 2;
- val = (int)strtol(cp, &ep, 16);
- } else
- val = (int)strtol(str, &ep, 10);
- if (*ep != '\0') {
- bb_error_msg_and_die("\"%s\" bad value for %s", str, what);
- }
- if (val < mi && mi >= 0) {
- if (mi == 0)
- bb_error_msg_and_die("%s must be >= %d", what, mi);
- else
- bb_error_msg_and_die("%s must be > %d", what, mi - 1);
- }
- if (val > ma && ma >= 0)
- bb_error_msg_and_die("%s must be <= %d", what, ma);
- return val;
-}
-
-
/*
* Subtract 2 timeval structs: out = out - in.
* Out is assumed to be >= in.
@@ -828,7 +800,7 @@
char name[257];
if (!nflag && from->sin_addr.s_addr != INADDR_ANY) {
- if(INET_rresolve(name, sizeof(name), from, 0x4000, 0xffffffff) >= 0)
+ if (INET_rresolve(name, sizeof(name), from, 0x4000, 0xffffffff) >= 0)
n = name;
}
ina = inet_ntoa(from->sin_addr);
@@ -974,7 +946,7 @@
#endif
);
- if(op & USAGE_OP_DONT_FRAGMNT)
+ if (op & USAGE_OP_DONT_FRAGMNT)
off = IP_DF;
#ifdef CONFIG_FEATURE_TRACEROUTE_USE_ICMP
useicmp = op & USAGE_OP_USE_ICMP;
@@ -983,34 +955,34 @@
#ifdef CONFIG_FEATURE_TRACEROUTE_VERBOSE
verbose = op & USAGE_OP_VERBOSE;
#endif
- if(op & USAGE_OP_IP_CHKSUM) {
+ if (op & USAGE_OP_IP_CHKSUM) {
doipcksum = 0;
- bb_error_msg("Warning: ip checksums disabled");
+ bb_error_msg("warning: ip checksums disabled");
}
if (tos_str)
- tos = str2val(tos_str, "tos", 0, 255);
- if(max_ttl_str)
- max_ttl = str2val(max_ttl_str, "max ttl", 1, 255);
- if(port_str)
- port = (u_short)str2val(port_str, "port", 1, (1 << 16) - 1);
- if(nprobes_str)
- nprobes = str2val(nprobes_str, "nprobes", 1, -1);
- if(source) {
+ tos = xatoul_range(tos_str, 0, 255);
+ if (max_ttl_str)
+ max_ttl = xatoul_range(max_ttl_str, 1, 255);
+ if (port_str)
+ port = xatou16(port_str);
+ if (nprobes_str)
+ nprobes = xatoul_range(nprobes_str, 1, INT_MAX);
+ if (source) {
/*
* set the ip source address of the outbound
* probe (e.g., on a multi-homed host).
*/
if (getuid()) bb_error_msg_and_die("-s %s: permission denied", source);
}
- if(waittime_str)
- waittime = str2val(waittime_str, "wait time", 2, 24 * 60 * 60);
- if(pausemsecs_str)
- pausemsecs = str2val(pausemsecs_str, "pause msecs", 0, 60 * 60 * 1000);
- if(first_ttl_str)
- first_ttl = str2val(first_ttl_str, "first ttl", 1, 255);
+ if (waittime_str)
+ waittime = xatoul_range(waittime_str, 2, 24 * 60 * 60);
+ if (pausemsecs_str)
+ pausemsecs = xatoul_range(pausemsecs_str, 0, 60 * 60 * 1000);
+ if (first_ttl_str)
+ first_ttl = xatoul_range(first_ttl_str, 1, 255);
#ifdef CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE
- if(sourse_route_list) {
+ if (sourse_route_list) {
llist_t *l_sr;
for(l_sr = sourse_route_list; l_sr; ) {
@@ -1046,8 +1018,7 @@
switch (argc - optind) {
case 2:
- packlen = str2val(argv[optind + 1],
- "packet length", minpacket, maxpacket);
+ packlen = xatoul_range(argv[optind + 1], minpacket, maxpacket);
/* Fall through */
case 1:
@@ -1055,8 +1026,7 @@
hi = gethostinfo(hostname);
setsin(to, hi->addrs[0]);
if (hi->n > 1)
- bb_error_msg(
- "Warning: %s has multiple addresses; using %s",
+ bb_error_msg("warning: %s has multiple addresses; using %s",
hostname, inet_ntoa(to->sin_addr));
hostname = hi->name;
hi->name = NULL;
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c
index 9ab6aee..f2cf82f 100644
--- a/networking/udhcp/dhcpc.c
+++ b/networking/udhcp/dhcpc.c
@@ -262,10 +262,10 @@
client_config.script = optarg;
break;
case 'T':
- client_config.timeout = atoi(optarg);
+ client_config.timeout = xatoi_u(optarg);
break;
case 't':
- client_config.retries = atoi(optarg);
+ client_config.retries = xatoi_u(optarg);
break;
case 'v':
printf("version %s\n\n", BB_VER);
diff --git a/networking/udhcp/files.c b/networking/udhcp/files.c
index d9dfb89..52d3838 100644
--- a/networking/udhcp/files.c
+++ b/networking/udhcp/files.c
@@ -35,7 +35,8 @@
int retval = 1;
if (!inet_aton(line, addr)) {
- if ((host = gethostbyname(line)))
+ host = gethostbyname(line);
+ if (host)
addr->s_addr = *((unsigned long *) host->h_addr_list[0]);
else retval = 0;
}
@@ -72,10 +73,7 @@
static int read_u32(const char *line, void *arg)
{
- uint32_t *dest = arg;
- char *endptr;
- *dest = strtoul(line, &endptr, 0);
- return endptr[0] == '\0';
+ return safe_strtou32(line, (uint32_t*)arg) == 0;
}
diff --git a/networking/vconfig.c b/networking/vconfig.c
index 6c808eb..003c1a8 100644
--- a/networking/vconfig.c
+++ b/networking/vconfig.c
@@ -144,14 +144,14 @@
* doing so wouldn't save that much space and would also make maintainence
* more of a pain. */
if (ifr.cmd == SET_VLAN_FLAG_CMD) { /* set_flag */
- ifr.u.flag = bb_xgetularg10_bnd(p, 0, 1);
+ ifr.u.flag = xatoul_range(p, 0, 1);
/* DM: in order to set reorder header, qos must be set */
- ifr.vlan_qos = bb_xgetularg10_bnd(argv[3], 0, 7);
+ ifr.vlan_qos = xatoul_range(argv[3], 0, 7);
} else if (ifr.cmd == ADD_VLAN_CMD) { /* add */
- ifr.u.VID = bb_xgetularg10_bnd(p, 0, VLAN_GROUP_ARRAY_LEN-1);
+ ifr.u.VID = xatoul_range(p, 0, VLAN_GROUP_ARRAY_LEN-1);
} else if (ifr.cmd != DEL_VLAN_CMD) { /* set_{egress|ingress}_map */
- ifr.u.skb_priority = bb_xgetularg10_bnd(p, 0, ULONG_MAX);
- ifr.vlan_qos = bb_xgetularg10_bnd(argv[3], 0, 7);
+ ifr.u.skb_priority = xatou(p);
+ ifr.vlan_qos = xatoul_range(argv[3], 0, 7);
}
}
diff --git a/networking/wget.c b/networking/wget.c
index eda0bb8..e7b19f2 100644
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -297,7 +297,7 @@
s = buf;
while (*s != '\0' && !isspace(*s)) ++s;
while (isspace(*s)) ++s;
- switch (status = atoi(s)) {
+ switch (status = xatoi(s)) {
case 0:
case 100:
while (gethdr(buf, sizeof(buf), sfp, &n) != NULL)
@@ -406,9 +406,9 @@
bb_error_msg_and_die("PASV: %s", buf+4);
s = strrchr(buf, ',');
*s = 0;
- port = atoi(s+1);
+ port = xatol_range(s+1, 0, 255);
s = strrchr(buf, ',');
- port += atoi(s+1) * 256;
+ port += xatol_range(s+1, 0, 255) * 256;
s_in.sin_port = htons(port);
dfp = open_socket(&s_in);
@@ -562,7 +562,7 @@
cp = strchr(pp, ':');
if (cp != NULL) {
*cp++ = '\0';
- h->port = htons(atoi(cp));
+ h->port = htons(xatou16(cp));
}
}
@@ -646,7 +646,7 @@
}
} while (!isdigit(buf[0]) || buf[3] != ' ');
- return atoi(buf);
+ return xatoi(buf);
}
#ifdef CONFIG_FEATURE_WGET_STATUSBAR