From db7f2e5881b9ae40896d7660cd2f2446f514c72d Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Sat, 2 Sep 2006 16:16:23 +0000 Subject: [PATCH] ping6: resolve interface name to number early. gcc is more efficient at truncating int to int16 via cast, use that instead of &. --- networking/ping.c | 2 +- networking/ping6.c | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/networking/ping.c b/networking/ping.c index 8ccb7e0..967a3e3 100644 --- a/networking/ping.c +++ b/networking/ping.c @@ -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; } diff --git a/networking/ping6.c b/networking/ping6.c index fdcd4ec..38d605c 100644 --- a/networking/ping6.c +++ b/networking/ping6.c @@ -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; } -- 2.7.4