- use RESERVE_CONFIG_BUFFER. For defconfig this gives:
[oweals/busybox.git] / networking / traceroute.c
index 15d55e79bc0c6806f282903956efbe5f74c0b8d6..22d27f240fc17c53387ac1d91669fa97dfb8c644 100644 (file)
  * Overlay for ip header used by other protocols (tcp, udp).
  */
 struct ipovly {
-       u_char  ih_x1[9];               /* (unused) */
-       u_char  ih_pr;                  /* protocol */
+       unsigned char  ih_x1[9];               /* (unused) */
+       unsigned char  ih_pr;                  /* protocol */
        short   ih_len;                 /* protocol length */
        struct  in_addr ih_src;         /* source internet address */
        struct  in_addr ih_dst;         /* destination internet address */
@@ -279,9 +279,9 @@ struct hostinfo {
 
 /* Data section of the probe packet */
 struct outdata {
-       u_char seq;             /* sequence number of this packet */
-       u_char ttl;             /* ttl packet left with */
-       struct timeval tv __attribute__((packed)); /* time packet left */
+       unsigned char seq;             /* sequence number of this packet */
+       unsigned char ttl;             /* ttl packet left with */
+       struct timeval tv ATTRIBUTE_PACKED; /* time packet left */
 };
 
 struct IFADDRLIST {
@@ -293,7 +293,7 @@ struct IFADDRLIST {
 static const char route[] = "/proc/net/route";
 
 /* last inbound (icmp) packet */
-static u_char  packet[512] __attribute__((align (32)));
+static unsigned char  packet[512] ATTRIBUTE_ALIGNED(32);
 
 static struct ip *outip;               /* last output (udp) packet */
 static struct udphdr *outudp;          /* last output (udp) packet */
@@ -321,7 +321,6 @@ static int maxpacket = 32 * 1024;      /* max ip packet size */
 static int pmtu;                       /* Path MTU Discovery (RFC1191) */
 
 static char *hostname;
-static const char devnull[] = "/dev/null";
 
 static u_short ident;
 static u_short port = 32768 + 666;     /* start udp dest port # for probe packets */
@@ -372,7 +371,7 @@ ifaddrlist(struct IFADDRLIST **ipaddrp)
                if (errno == EINVAL)
                        bb_error_msg_and_die(
                            "SIOCGIFCONF: ifreq struct too small (%d bytes)",
-                           sizeof(ibuf));
+                           (int)sizeof(ibuf));
                else
                        bb_perror_msg_and_die("SIOCGIFCONF");
        }
@@ -597,7 +596,7 @@ in_cksum(u_short *addr, int len)
 
        /* mop up an odd byte, if necessary */
        if (nleft == 1)
-               sum += *(u_char *)w;
+               sum += *(unsigned char *)w;
 
        /*
         * add back carry outs from top 16 bits to low 16 bits
@@ -690,7 +689,7 @@ send_probe(int seq, int ttl, struct timeval *tp)
                if (packlen & 1) {
                        if ((i % 8) == 0)
                                printf("\n\t");
-                       printf(" %02x", *(u_char *)sp);
+                       printf(" %02x", *(unsigned char *)sp);
                }
                printf("]\n");
        }
@@ -729,7 +728,7 @@ deltaT(struct timeval *t1p, struct timeval *t2p)
  * Convert an ICMP "type" field to a printable string.
  */
 static inline const char *
-pr_type(u_char t)
+pr_type(unsigned char t)
 {
        static const char * const ttab[] = {
        "Echo Reply",   "ICMP 1",       "ICMP 2",       "Dest Unreachable",
@@ -747,10 +746,10 @@ pr_type(u_char t)
 #endif
 
 static int
-packet_ok(u_char *buf, int cc, struct sockaddr_in *from, int seq)
+packet_ok(unsigned char *buf, int cc, struct sockaddr_in *from, int seq)
 {
        struct icmp *icp;
-       u_char type, code;
+       unsigned char type, code;
        int hlen;
        struct ip *ip;
 
@@ -791,7 +790,7 @@ packet_ok(u_char *buf, int cc, struct sockaddr_in *from, int seq)
                            icp->icmp_seq == htons(seq))
                                return -2;
 
-                       hicmp = (struct icmp *)((u_char *)hip + hlen);
+                       hicmp = (struct icmp *)((unsigned char *)hip + hlen);
                        /* XXX 8 is a magic number */
                        if (hlen + 8 <= cc &&
                            hip->ip_p == IPPROTO_ICMP &&
@@ -801,7 +800,7 @@ packet_ok(u_char *buf, int cc, struct sockaddr_in *from, int seq)
                } else
 #endif
                      {
-                       up = (struct udphdr *)((u_char *)hip + hlen);
+                       up = (struct udphdr *)((unsigned char *)hip + hlen);
                        /* XXX 8 is a magic number */
                        if (hlen + 12 <= cc &&
                            hip->ip_p == IPPROTO_UDP &&
@@ -851,7 +850,7 @@ inetname(struct sockaddr_in *from)
 }
 
 static inline void
-print(u_char *buf, int cc, struct sockaddr_in *from)
+print(unsigned char *buf, int cc, struct sockaddr_in *from)
 {
        struct ip *ip;
        int hlen;
@@ -903,10 +902,8 @@ gethostinfo(const char *host)
 static void
 freehostinfo(struct hostinfo *hi)
 {
-       if (hi->name != NULL) {
-               free(hi->name);
-               hi->name = NULL;
-       }
+       free(hi->name);
+       hi->name = NULL;
        free((char *)hi->addrs);
        free((char *)hi);
 }
@@ -929,7 +926,7 @@ traceroute_main(int argc, char *argv[])
 {
        int code, n;
        char *cp;
-       u_char *outp;
+       unsigned char *outp;
        u_int32_t *ap;
        struct sockaddr_in *from = (struct sockaddr_in *)&wherefrom;
        struct sockaddr_in *to = (struct sockaddr_in *)&whereto;
@@ -966,7 +963,7 @@ traceroute_main(int argc, char *argv[])
 
        opterr = 0;
 #ifdef CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE
-       bb_opt_complementally = "x-x:g*";
+       bb_opt_complementally = "x-x:g::";
 #else
        bb_opt_complementally = "x-x";
 #endif
@@ -1090,7 +1087,7 @@ traceroute_main(int argc, char *argv[])
                bb_perror_msg_and_die("unknown protocol %s", cp);
 
        /* Insure the socket fds won't be 0, 1 or 2 */
-       do n = bb_xopen(devnull, O_RDONLY); while (n < 2);
+       do n = bb_xopen(bb_dev_null, O_RDONLY); while (n < 2);
        if (n > 2)
                close(n);
 
@@ -1113,7 +1110,7 @@ traceroute_main(int argc, char *argv[])
 #ifdef CONFIG_FEATURE_TRACEROUTE_SOURCE_ROUTE
 #if defined(IP_OPTIONS)
        if (lsrr > 0) {
-               u_char optlist[MAX_IPOPTLEN];
+               unsigned char optlist[MAX_IPOPTLEN];
 
                cp = "ip";
                if ((pe = getprotobyname(cp)) == NULL)
@@ -1180,10 +1177,10 @@ traceroute_main(int argc, char *argv[])
                outip->ip_tos = tos;
        outip->ip_len = htons(packlen);
        outip->ip_off = htons(off);
-       outp = (u_char *)(outip + 1);
+       outp = (unsigned char *)(outip + 1);
        outip->ip_dst = to->sin_addr;
 
-       outip->ip_hl = (outp - (u_char *)outip) >> 2;
+       outip->ip_hl = (outp - (unsigned char *)outip) >> 2;
        ident = (getpid() & 0xffff) | 0x8000;
 #ifdef CONFIG_FEATURE_TRACEROUTE_USE_ICMP
        if (useicmp) {