These were broken when using dmalloc due to include file ordering
[oweals/busybox.git] / networking / ping.c
index a2f52ff387a8da65b884ec5a18e1df336066d544..e4307d2deeb23c92571015bef5d1527592c5e0b6 100644 (file)
@@ -1,6 +1,6 @@
 /* vi: set sw=4 ts=4: */
 /*
- * $Id: ping.c,v 1.33 2001/01/24 17:37:07 andersen Exp $
+ * $Id: ping.c,v 1.43 2001/05/21 20:30:51 andersen Exp $
  * Mini ping implementation for busybox
  *
  * Copyright (C) 1999 by Randolph Chung <tausq@debian.org>
  * Original copyright notice is retained at the end of this file.
  */
 
-#warning This applet has moved to netkit-tiny.  After BusyBox 0.49, this
-#warning applet will be removed from BusyBox.  All maintenance efforts
-#warning should be done in the netkit-tiny source tree.
-
-#include "busybox.h"
 #include <sys/param.h>
 #include <sys/socket.h>
 #include <sys/file.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include "busybox.h"
 
 
 /* It turns out that libc5 doesn't have proper icmp support
  * built into it header files, so we have to supplement it */
-#if ! defined __GLIBC__ && ! defined __UCLIBC__
-typedef unsigned int socklen_t;
-
+#if __GNU_LIBRARY__ < 5
 static const int ICMP_MINLEN = 8;                              /* abs minimum */
 
 struct icmp_ra_addr
@@ -177,7 +174,7 @@ static int in_cksum(unsigned short *buf, int sz)
 }
 
 /* simple version */
-#ifdef BB_FEATURE_SIMPLE_PING
+#ifndef BB_FEATURE_FANCY_PING
 static char *hostname = NULL;
 
 static void noresp(int ign)
@@ -203,10 +200,7 @@ static void ping(const char *host)
        memset(&pingaddr, 0, sizeof(struct sockaddr_in));
 
        pingaddr.sin_family = AF_INET;
-       if (!(h = gethostbyname(host))) {
-               error_msg("unknown host %s\n", host);
-               exit(1);
-       }
+       h = xgethostbyname(host);
        memcpy(&pingaddr.sin_addr, h->h_addr, sizeof(pingaddr.sin_addr));
        hostname = h->h_name;
 
@@ -252,12 +246,12 @@ extern int ping_main(int argc, char **argv)
        argc--;
        argv++;
        if (argc < 1)
-               usage(ping_usage);
+               show_usage();
        ping(*argv);
        return EXIT_SUCCESS;
 }
 
-#else /* ! BB_FEATURE_SIMPLE_PING */
+#else /* ! BB_FEATURE_FANCY_PING */
 /* full(er) version */
 static char *hostname = NULL;
 static struct sockaddr_in pingaddr;
@@ -325,7 +319,7 @@ static void sendping(int junk)
        if (i < 0)
                perror_msg_and_die("sendto");
        else if ((size_t)i != sizeof(packet))
-               error_msg_and_die("ping wrote %d chars; %d expected\n", i,
+               error_msg_and_die("ping wrote %d chars; %d expected", i,
                           (int)sizeof(packet));
 
        signal(SIGALRM, sendping);
@@ -420,7 +414,7 @@ static void unpack(char *buf, int sz, struct sockaddr_in *from)
                printf("\n");
        } else 
                if (icmppkt->icmp_type != ICMP_ECHO)
-                       error_msg("Warning: Got ICMP %d (%s)\n",
+                       error_msg("Warning: Got ICMP %d (%s)",
                                        icmppkt->icmp_type, icmp_type_name (icmppkt->icmp_type));
 }
 
@@ -438,7 +432,7 @@ static void ping(const char *host)
        if ((pingsock = socket(AF_INET, SOCK_RAW,
                                                   (proto ? proto->p_proto : 1))) < 0) {        /* 1 == ICMP */
                if (errno == EPERM)
-                       error_msg_and_die("permission denied. (are you root?)\n");
+                       error_msg_and_die("permission denied. (are you root?)");
                else
                        perror_msg_and_die("creating a raw socket");
        }
@@ -449,15 +443,9 @@ static void ping(const char *host)
        memset(&pingaddr, 0, sizeof(struct sockaddr_in));
 
        pingaddr.sin_family = AF_INET;
-       if (!(h = gethostbyname(host))) {
-               error_msg("unknown host %s\n", host);
-               exit(1);
-       }
-
-       if (h->h_addrtype != AF_INET) {
-               error_msg("unknown address type; only AF_INET is currently supported.\n");
-               exit(1);
-       }
+       h = xgethostbyname(host);
+       if (h->h_addrtype != AF_INET)
+               error_msg_and_die("unknown address type; only AF_INET is currently supported.");
 
        pingaddr.sin_family = AF_INET;  /* h->h_addrtype */
        memcpy(&pingaddr.sin_addr, h->h_addr, sizeof(pingaddr.sin_addr));
@@ -523,30 +511,30 @@ extern int ping_main(int argc, char **argv)
                        break;
                case 'c':
                        if (--argc <= 0)
-                               usage(ping_usage);
+                               show_usage();
                        argv++;
                        pingcount = atoi(*argv);
                        break;
                case 's':
                        if (--argc <= 0)
-                               usage(ping_usage);
+                               show_usage();
                        argv++;
                        datalen = atoi(*argv);
                        break;
                default:
-                       usage(ping_usage);
+                       show_usage();
                }
                argc--;
                argv++;
        }
        if (argc < 1)
-               usage(ping_usage);
+               show_usage();
 
        myid = getpid() & 0xFFFF;
        ping(*argv);
        return EXIT_SUCCESS;
 }
-#endif /* ! BB_FEATURE_SIMPLE_PING */
+#endif /* ! BB_FEATURE_FANCY_PING */
 
 /*
  * Copyright (c) 1989 The Regents of the University of California.