damnit.
[oweals/busybox.git] / ping.c
diff --git a/ping.c b/ping.c
index fd5e33c032a218d079f32db47b86d509a553a7c3..4176ab390da6c9b6bdba1b9f9f3466d236a3c23c 100644 (file)
--- a/ping.c
+++ b/ping.c
@@ -1,5 +1,5 @@
 /*
- * $Id: ping.c,v 1.3 1999/12/08 04:23:30 andersen Exp $
+ * $Id: ping.c,v 1.5 1999/12/09 06:11:36 andersen Exp $
  * Mini ping implementation for busybox
  *
  * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
@@ -53,6 +53,7 @@
 #define        MAXPACKET       65468
 #define        MAX_DUP_CHK     (8 * 128)
 #define MAXWAIT         10
+#define PINGINTERVAL    1 /* second */
 
 #define O_QUIET         (1 << 0)
 
@@ -63,6 +64,7 @@
 #define        TST(bit)        (A(bit) & B(bit))
 
 static const char* ping_usage = "ping [OPTION]... host\n\n"
+"Send ICMP ECHO_REQUEST packets to network hosts.\n\n"
 "Options:\n"
 "\t-q\t\tQuiet mode, only displays output at start and when finished.\n"
 "\t-c COUNT\tSend only COUNT pings.\n";
@@ -154,8 +156,8 @@ static void sendping(int ign)
     }
 
     signal(SIGALRM, sendping);
-    if (pingcount == 0 || ntransmitted < pingcount) { /* schedule next */
-        alarm(1);
+    if (pingcount == 0 || ntransmitted < pingcount) { /* schedule next in 1s */
+        alarm(PINGINTERVAL);
     } else { /* done, wait for the last ping to come back */
        /* todo, don't necessarily need to wait so long... */
         signal(SIGALRM, pingstats);
@@ -242,9 +244,8 @@ static void ping(char *host)
        exit(1);
     }
 
-#ifdef SUID_BUSYBOX
+    /* drop root privs if running setuid */
     setuid(getuid());
-#endif
     
     memset(&pingaddr, 0, sizeof(struct sockaddr_in));
     pingaddr.sin_family = AF_INET;
@@ -304,35 +305,31 @@ static void ping(char *host)
 
 extern int ping_main(int argc, char **argv)
 {
+    char *thisarg;
+    
     argc--;
     argv++;
     options = 0;
     /* Parse any options */
-    if (argc < 1) usage(ping_usage);
-
-    while (**argv == '-') {
-       while (*++(*argv))
-           switch (**argv) {
-           case 'c':
-               argc--; argv++;
-               if (argc < 1) usage(ping_usage);
-               pingcount = atoi(*argv);
-               break;
-           case 'q':
-               options |= O_QUIET;
-               break;
-           default:
-               usage(ping_usage);
-           }
-       argc--;
-       argv++;
+    while (argc > 1) {
+        if (**argv != '-') usage(ping_usage);
+        thisarg = *argv; thisarg++;
+        switch (*thisarg) {
+           case 'q': options |= O_QUIET; break;
+           case 'c':
+               argc--; argv++;
+               pingcount = atoi(*argv);                
+               break;
+           default:
+               usage(ping_usage);
+        }
+        argc--; argv++;
     }
-
-    if (argc < 1) usage(ping_usage);
+    if (argc < 1) usage(ping_usage);       
 
     myid = getpid() & 0xFFFF;
-    ping(*(argv++));
-    exit( TRUE);
+    ping(*argv);
+    exit(TRUE);
 }
 
 /*