OSDN Git Service

Update inet_aton() to support an undocumented feature of inet_aton,
authorEric Andersen <andersen@codepoet.org>
Mon, 4 Aug 2003 19:03:33 +0000 (19:03 -0000)
committerEric Andersen <andersen@codepoet.org>
Mon, 4 Aug 2003 19:03:33 +0000 (19:03 -0000)
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

index df14fd0..b4f8c9b 100644 (file)
 #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;
 }