INN commit: trunk/lib (inet_ntop.c)

INN Commit rra at isc.org
Tue Nov 5 20:09:30 UTC 2013


    Date: Tuesday, November 5, 2013 @ 12:09:30
  Author: iulius
Revision: 9556

inet_ntop.c:  sync with rra-c-util

- Use socket_set_errno instead of assigning to errno.

- Check the return status of snprintf in the inet_ntop
  replacement function instead of assuming that it will
  always succeed.

Modified:
  trunk/lib/inet_ntop.c

-------------+
 inet_ntop.c |   63 ++++++++++++++++++++++++++++++++++++----------------------
 1 file changed, 40 insertions(+), 23 deletions(-)

Modified: inet_ntop.c
===================================================================
--- inet_ntop.c	2013-11-03 19:19:52 UTC (rev 9555)
+++ inet_ntop.c	2013-11-05 20:09:30 UTC (rev 9556)
@@ -1,22 +1,32 @@
-/*  $Id$
-**
-**  Replacement for a missing inet_ntop.
-**
-**  Written by Russ Allbery <rra at stanford.edu>
-**  This work is hereby placed in the public domain by its author.
-**
-**  Provides an implementation of inet_ntop that only supports IPv4 addresses
-**  for hosts that are missing it.  If you want IPv6 support, you need to have
-**  a real inet_ntop function; this function is only provided so that code can
-**  call inet_ntop unconditionally without needing to worry about whether the
-**  host supports IPv6.
-*/
+/* $Id$
+ *
+ * Replacement for a missing inet_ntop.
+ *
+ * Provides an implementation of inet_ntop that only supports IPv4 addresses
+ * for hosts that are missing it.  If you want IPv6 support, you need to have
+ * a real inet_ntop function; this function is only provided so that code can
+ * call inet_ntop unconditionally without needing to worry about whether the
+ * host supports IPv6.
+ *
+ * The canonical version of this file is maintained in the rra-c-util package,
+ * which can be found at <http://www.eyrie.org/~eagle/software/rra-c-util/>.
+ *
+ * Written by Russ Allbery <rra at stanford.edu>
+ *
+ * The authors hereby relinquish any claim to any copyright that they may have
+ * in this work, whether granted under contract or by operation of law or
+ * international treaty, and hereby commit to the public, at large, that they
+ * shall not, at any time in the future, seek to enforce any copyright in this
+ * work against any person or entity, or prevent any person or entity from
+ * copying, publishing, distributing or creating derivative works of this
+ * work.
+ */
 
 #include "config.h"
 #include "clibrary.h"
+#include "portable/socket.h"
+
 #include <errno.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
 
 /* This may already be defined by the system headers. */
 #ifndef INET_ADDRSTRLEN
@@ -28,29 +38,36 @@
 # define EAFNOSUPPORT EDOM
 #endif
 
-/* If we're running the test suite, rename inet_ntop to avoid conflicts with
-   the system version. */
+/*
+ * If we're running the test suite, rename inet_ntop to avoid conflicts with
+ * the system version.
+ */
 #if TESTING
 # define inet_ntop test_inet_ntop
 const char *test_inet_ntop(int, const void *, char *, socklen_t);
 #endif
 
 const char *
-inet_ntop(int af, const void *src, char *dst, socklen_t cnt)
+inet_ntop(int af, const void *src, char *dst, socklen_t size)
 {
     const unsigned char *p;
+    int status;
 
     if (af != AF_INET) {
-        errno = EAFNOSUPPORT;
+        socket_set_errno(EAFNOSUPPORT);
         return NULL;
     }
-    if (cnt < INET_ADDRSTRLEN) {
+    if (size < INET_ADDRSTRLEN) {
         errno = ENOSPC;
         return NULL;
     }
     p = src;
-    snprintf(dst, cnt, "%u.%u.%u.%u",
-             (unsigned int) (p[0] & 0xff), (unsigned int) (p[1] & 0xff),
-             (unsigned int) (p[2] & 0xff), (unsigned int) (p[3] & 0xff));
+    status = snprintf(dst, size, "%u.%u.%u.%u",
+                      (unsigned int) (p[0] & 0xff),
+                      (unsigned int) (p[1] & 0xff),
+                      (unsigned int) (p[2] & 0xff),
+                      (unsigned int) (p[3] & 0xff));
+    if (status < 0)
+        return NULL;
     return dst;
 }



More information about the inn-committers mailing list