diff options
Diffstat (limited to 'ping.c')
-rw-r--r-- | ping.c | 50 |
1 files changed, 23 insertions, 27 deletions
@@ -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 | ||
306 | extern int ping_main(int argc, char **argv) | 306 | extern 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 | /* |