From d2cc961c7312e18852ef016b4cfa7be02bbca725 Mon Sep 17 00:00:00 2001
From: Eric Andersen <andersen@codepoet.org>
Date: Mon, 4 Aug 2003 19:03:33 +0000
Subject: Update inet_aton() to support an undocumented feature of inet_aton,
 per UNIX Network Programming, Volume 1, second edition:

    An undocumented feature of inet_aton is that if addrptr is
    a null pointer, the function still performs it validation
    of the input string, but does not store the result.
---
 libc/inet/addr.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

(limited to 'libc')

diff --git a/libc/inet/addr.c b/libc/inet/addr.c
index df14fd09f..b4f8c9b87 100644
--- a/libc/inet/addr.c
+++ b/libc/inet/addr.c
@@ -24,20 +24,17 @@
 #include <ctype.h>
 #include <netinet/in.h>
 
-int inet_aton(const char *cp, struct in_addr *inp);
+int inet_aton(const char *cp, struct in_addr *addrptr);
 
 #ifdef L_inet_aton
-int inet_aton(cp, inp)
+int inet_aton(cp, addrptr)
 const char *cp;
-struct in_addr *inp;
+struct in_addr *addrptr;
 {
 	unsigned long addr;
 	int value;
 	int part;
 
-	if (!inp)
-		return 0;
-
 	addr = 0;
 	for (part = 1; part <= 4; part++) {
 
@@ -65,7 +62,16 @@ struct in_addr *inp;
 		addr |= value;
 	}
 
-	inp->s_addr = htonl(addr);
+	/*  W. Richard Stevens in his book UNIX Network Programming,
+	 *  Volume 1, second edition, on page 71 says:
+	 *
+	 *  An undocumented feature of inet_aton is that if addrptr is
+	 *  a null pointer, the function still performs it validation
+	 *  of the input string, but does not store the result.
+	 */
+	if (addrptr) {
+	    addrptr->s_addr = htonl(addr);
+	}
 
 	return 1;
 }
-- 
cgit v1.2.3