ping6: resolve interface name to number early.
authorDenis Vlasenko <vda.linux@googlemail.com>
Sat, 2 Sep 2006 16:16:23 +0000 (16:16 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sat, 2 Sep 2006 16:16:23 +0000 (16:16 -0000)
gcc is more efficient at truncating int to int16
via cast, use that instead of &.

networking/ping.c
networking/ping6.c

index 8ccb7e0..967a3e3 100644 (file)
@@ -416,7 +416,7 @@ int ping_main(int argc, char **argv)
        if (argc < 1)
                bb_show_usage();
 
-       myid = getpid() & 0xFFFF;
+       myid = (int16_t) getpid();
        ping(*argv);
        return EXIT_SUCCESS;
 }
index fdcd4ec..38d605c 100644 (file)
@@ -146,7 +146,7 @@ int ping6_main(int argc, char **argv)
 static struct sockaddr_in6 pingaddr;
 static int pingsock = -1;
 static int datalen; /* intentionally uninitialized to work around gcc bug */
-static char* ifname;
+static int if_index;
 
 static long ntransmitted, nreceived, nrepeats, pingcount;
 static int myid, options;
@@ -367,10 +367,8 @@ static void ping(const char *host)
        setsockopt(pingsock, SOL_IPV6, IPV6_HOPLIMIT, (char *) &sockopt,
                           sizeof(sockopt));
 
-       if (ifname) {
-               if ((pingaddr.sin6_scope_id = if_nametoindex(ifname)) == 0)
-                       bb_error_msg_and_die("%s: invalid interface name", ifname);
-       }
+       if (if_index)
+               pingaddr.sin6_scope_id = if_index;
 
        printf("PING %s (%s): %d data bytes\n",
                   hostent->h_name,
@@ -455,7 +453,10 @@ int ping6_main(int argc, char **argv)
                        if (--argc <= 0)
                                bb_show_usage();
                        argv++;
-                       ifname = *argv;
+                       if_index = if_nametoindex(*argv);
+                       if (!if_index)
+                               bb_error_msg_and_die(
+                                       "%s: invalid interface name", *argv);
                        break;
                default:
                        bb_show_usage();
@@ -466,7 +467,7 @@ int ping6_main(int argc, char **argv)
        if (argc < 1)
                bb_show_usage();
 
-       myid = getpid() & 0xFFFF;
+       myid = (int16_t) getpid();
        ping(*argv);
        return EXIT_SUCCESS;
 }