diff --git a/networking/nslookup.c b/networking/nslookup.c
index 99f781e..fd241a5 100644
--- a/networking/nslookup.c
+++ b/networking/nslookup.c
@@ -484,40 +484,6 @@
 	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 @@
 	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 @@
 		 * 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
