arping: stop using last gethostbyname2 in the tree
authorDenis Vlasenko <vda.linux@googlemail.com>
Thu, 25 Jan 2007 19:44:38 +0000 (19:44 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Thu, 25 Jan 2007 19:44:38 +0000 (19:44 -0000)
hostname: small optimization

include/libbb.h
networking/arping.c
networking/hostname.c

index 8cd4bc377ec13091a03ec62e96c2f68ce393f2c9..fda0dbe40ce5ab975edc6465204255eaef1d4859 100644 (file)
@@ -338,8 +338,6 @@ char* xmalloc_sockaddr2dotted_noport(const struct sockaddr *sa, socklen_t salen)
 // "old" (ipv4 only) API
 // users: traceroute.c hostname.c ifconfig.c ping.c
 struct hostent *xgethostbyname(const char *name);
-//TODO: eliminate gethostbyname2 in arping (the only remaining place),
-//use host_and_af2sockaddr instead.
 
 
 extern char *xstrdup(const char *s);
index 55b27872b80dd2362f1ded70d56a7beef2fd9906..725b0e4cbb4532f6e46b66319ecd6be9f61eed40 100644 (file)
@@ -305,13 +305,11 @@ int arping_main(int argc, char **argv)
        }
 
        if (!inet_aton(target, &dst)) {
-               struct hostent *hp;
-
-               hp = gethostbyname2(target, AF_INET);
-               if (!hp) {
-                       bb_error_msg_and_die("invalid or unknown target %s", target);
-               }
-               memcpy(&dst, hp->h_addr, 4);
+               len_and_sockaddr *lsa;
+               lsa = host_and_af2sockaddr(target, 0, AF_INET);
+               memcpy(&dst, &lsa->sin.sin_addr.s_addr, 4);
+               if (ENABLE_FEATURE_CLEAN_UP)
+                       free(lsa);
        }
 
        if (source && !inet_aton(source, &src)) {
index 6d3b8ebb86c0c5c84d232dad3f79ab78f48ab372..7116a14df4e2f631625b5a069aaf0cd99680decd 100644 (file)
@@ -48,11 +48,12 @@ int hostname_main(int argc, char **argv)
                OPT_f = 0x2,
                OPT_i = 0x4,
                OPT_s = 0x8,
+               OPT_F = 0x8,
                OPT_dfis = 0xf,
        };
 
        char buf[256];
-       char *hostname_str = NULL;
+       char *hostname_str;
 
        if (argc < 1)
                bb_show_usage();
@@ -70,7 +71,7 @@ int hostname_main(int argc, char **argv)
                        puts(hp->h_name);
                } else if (option_mask32 & OPT_s) {
                        if (p != NULL) {
-                               *p = 0;
+                               *p = '\0';
                        }
                        puts(hp->h_name);
                } else if (option_mask32 & OPT_d) {
@@ -84,7 +85,7 @@ int hostname_main(int argc, char **argv)
                }
        }
        /* Set the hostname */
-       else if (hostname_str != NULL) {
+       else if (option_mask32 & OPT_F) {
                do_sethostname(hostname_str, 1);
        } else if (optind < argc) {
                do_sethostname(argv[optind], 0);