nslookup: simplify make_ptr
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 15 Apr 2018 18:04:57 +0000 (20:04 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 15 Apr 2018 18:04:57 +0000 (20:04 +0200)
function                                             old     new   delta
nslookup_main                                       2644    2611     -33

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/nslookup.c

index 99f781e1ba0fb7b612c468412d5d1c812f86d692..fd241a5ca60c883424febce6d8b7cdb8b6db48da 100644 (file)
@@ -484,40 +484,6 @@ static int parse_reply(const unsigned char *msg, size_t len)
        return i;
 }
 
-static char *make_ptr(char resbuf[80], const char *addrstr)
-{
-       unsigned char addr[16];
-       int i;
-
-#if ENABLE_FEATURE_IPV6
-       if (inet_pton(AF_INET6, addrstr, addr)) {
-               if (memcmp(addr, v4_mapped, 12) != 0) {
-                       char *ptr = resbuf;
-                       for (i = 0; i < 16; i++) {
-                               *ptr++ = 0x20 | bb_hexdigits_upcase[(unsigned char)addr[15 - i] & 0xf];
-                               *ptr++ = '.';
-                               *ptr++ = 0x20 | bb_hexdigits_upcase[(unsigned char)addr[15 - i] >> 4];
-                               *ptr++ = '.';
-                       }
-                       strcpy(ptr, "ip6.arpa");
-               }
-               else {
-                       sprintf(resbuf, "%u.%u.%u.%u.in-addr.arpa",
-                               addr[15], addr[14], addr[13], addr[12]);
-               }
-               return resbuf;
-       }
-#endif
-
-       if (inet_pton(AF_INET, addrstr, addr)) {
-               sprintf(resbuf, "%u.%u.%u.%u.in-addr.arpa",
-                       addr[3], addr[2], addr[1], addr[0]);
-               return resbuf;
-       }
-
-       return NULL;
-}
-
 /*
  * Function logic borrowed & modified from musl libc, res_msend.c
  * G.query_count is always > 0.
@@ -743,6 +709,38 @@ static void add_query(int type, const char *dname)
        new_q->qlen = qlen;
 }
 
+static char *make_ptr(const char *addrstr)
+{
+       unsigned char addr[16];
+       int i;
+
+#if ENABLE_FEATURE_IPV6
+       if (inet_pton(AF_INET6, addrstr, addr)) {
+               if (memcmp(addr, v4_mapped, 12) != 0) {
+                       char resbuf[80];
+                       char *ptr = resbuf;
+                       for (i = 0; i < 16; i++) {
+                               *ptr++ = 0x20 | bb_hexdigits_upcase[(unsigned char)addr[15 - i] & 0xf];
+                               *ptr++ = '.';
+                               *ptr++ = 0x20 | bb_hexdigits_upcase[(unsigned char)addr[15 - i] >> 4];
+                               *ptr++ = '.';
+                       }
+                       strcpy(ptr, "ip6.arpa");
+                       return xstrdup(resbuf);
+               }
+               return xasprintf("%u.%u.%u.%u.in-addr.arpa",
+                               addr[15], addr[14], addr[13], addr[12]);
+       }
+#endif
+
+       if (inet_pton(AF_INET, addrstr, addr)) {
+               return xasprintf("%u.%u.%u.%u.in-addr.arpa",
+                       addr[3], addr[2], addr[1], addr[0]);
+       }
+
+       return NULL;
+}
+
 int nslookup_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int nslookup_main(int argc UNUSED_PARAM, char **argv)
 {
@@ -843,11 +841,10 @@ int nslookup_main(int argc UNUSED_PARAM, char **argv)
                 * mimicking the one of the traditional nslookup applet.
                 */
                char *ptr;
-               char buf80[80];
 
-               ptr = make_ptr(buf80, argv[0]);
+               ptr = make_ptr(argv[0]);
                if (ptr) {
-                       add_query(T_PTR, xstrdup(ptr));
+                       add_query(T_PTR, ptr);
                } else {
                        add_query(T_A, argv[0]);
 #if ENABLE_FEATURE_IPV6