aboutsummaryrefslogtreecommitdiff
path: root/ping.c
diff options
context:
space:
mode:
Diffstat (limited to 'ping.c')
-rw-r--r--ping.c50
1 files changed, 23 insertions, 27 deletions
diff --git a/ping.c b/ping.c
index 45f3c20aa..4176ab390 100644
--- a/ping.c
+++ b/ping.c
@@ -1,5 +1,5 @@
1/* 1/*
2 * $Id: ping.c,v 1.4 1999/12/08 23:19:36 andersen Exp $ 2 * $Id: ping.c,v 1.5 1999/12/09 06:11:36 andersen Exp $
3 * Mini ping implementation for busybox 3 * Mini ping implementation for busybox
4 * 4 *
5 * Copyright (C) 1999 by Randolph Chung <tausq@debian.org> 5 * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@@ -53,6 +53,7 @@
53#define MAXPACKET 65468 53#define MAXPACKET 65468
54#define MAX_DUP_CHK (8 * 128) 54#define MAX_DUP_CHK (8 * 128)
55#define MAXWAIT 10 55#define MAXWAIT 10
56#define PINGINTERVAL 1 /* second */
56 57
57#define O_QUIET (1 << 0) 58#define O_QUIET (1 << 0)
58 59
@@ -155,8 +156,8 @@ static void sendping(int ign)
155 } 156 }
156 157
157 signal(SIGALRM, sendping); 158 signal(SIGALRM, sendping);
158 if (pingcount == 0 || ntransmitted < pingcount) { /* schedule next */ 159 if (pingcount == 0 || ntransmitted < pingcount) { /* schedule next in 1s */
159 alarm(1); 160 alarm(PINGINTERVAL);
160 } else { /* done, wait for the last ping to come back */ 161 } else { /* done, wait for the last ping to come back */
161 /* todo, don't necessarily need to wait so long... */ 162 /* todo, don't necessarily need to wait so long... */
162 signal(SIGALRM, pingstats); 163 signal(SIGALRM, pingstats);
@@ -243,9 +244,8 @@ static void ping(char *host)
243 exit(1); 244 exit(1);
244 } 245 }
245 246
246#ifdef SUID_BUSYBOX 247 /* drop root privs if running setuid */
247 setuid(getuid()); 248 setuid(getuid());
248#endif
249 249
250 memset(&pingaddr, 0, sizeof(struct sockaddr_in)); 250 memset(&pingaddr, 0, sizeof(struct sockaddr_in));
251 pingaddr.sin_family = AF_INET; 251 pingaddr.sin_family = AF_INET;
@@ -305,35 +305,31 @@ static void ping(char *host)
305 305
306extern int ping_main(int argc, char **argv) 306extern int ping_main(int argc, char **argv)
307{ 307{
308 char *thisarg;
309
308 argc--; 310 argc--;
309 argv++; 311 argv++;
310 options = 0; 312 options = 0;
311 /* Parse any options */ 313 /* Parse any options */
312 if (argc < 1) usage(ping_usage); 314 while (argc > 1) {
313 315 if (**argv != '-') usage(ping_usage);
314 while (**argv == '-') { 316 thisarg = *argv; thisarg++;
315 while (*++(*argv)) 317 switch (*thisarg) {
316 switch (**argv) { 318 case 'q': options |= O_QUIET; break;
317 case 'c': 319 case 'c':
318 argc--; argv++; 320 argc--; argv++;
319 if (argc < 1) usage(ping_usage); 321 pingcount = atoi(*argv);
320 pingcount = atoi(*argv); 322 break;
321 break; 323 default:
322 case 'q': 324 usage(ping_usage);
323 options |= O_QUIET; 325 }
324 break; 326 argc--; argv++;
325 default:
326 usage(ping_usage);
327 }
328 argc--;
329 argv++;
330 } 327 }
331 328 if (argc < 1) usage(ping_usage);
332 if (argc < 1) usage(ping_usage);
333 329
334 myid = getpid() & 0xFFFF; 330 myid = getpid() & 0xFFFF;
335 ping(*(argv++)); 331 ping(*argv);
336 exit( TRUE); 332 exit(TRUE);
337} 333}
338 334
339/* 335/*