Module Name:    src
Committed By:   is
Date:           Fri Jan 29 22:26:48 UTC 2010

Modified Files:
        src/lib/libc/net: getnameinfo.c

Log Message:
Print AppleTalk phase 2 range, too, if available.


To generate a diff of this commit:
cvs rdiff -u -r1.48 -r1.49 src/lib/libc/net/getnameinfo.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/net/getnameinfo.c
diff -u src/lib/libc/net/getnameinfo.c:1.48 src/lib/libc/net/getnameinfo.c:1.49
--- src/lib/libc/net/getnameinfo.c:1.48	Tue Jan 26 21:27:54 2010
+++ src/lib/libc/net/getnameinfo.c	Fri Jan 29 22:26:48 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: getnameinfo.c,v 1.48 2010/01/26 21:27:54 is Exp $	*/
+/*	$NetBSD: getnameinfo.c,v 1.49 2010/01/29 22:26:48 is Exp $	*/
 /*	$KAME: getnameinfo.c,v 1.45 2000/09/25 22:43:56 itojun Exp $	*/
 
 /*
@@ -47,7 +47,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: getnameinfo.c,v 1.48 2010/01/26 21:27:54 is Exp $");
+__RCSID("$NetBSD: getnameinfo.c,v 1.49 2010/01/29 22:26:48 is Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
@@ -150,7 +150,7 @@
     int flags)
 {
 	char numserv[8];
-	int n;
+	int n, m=0;
 
 	const struct sockaddr_at *sat =
 	    (const struct sockaddr_at *)(const void *)sa;
@@ -162,21 +162,41 @@
 		strlcpy(serv, numserv, servlen);
 	}
 
+        n = snprintf(host, hostlen, "%u.%u",
+	    ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node);
+
+	if (n < 0 || (socklen_t)(m+n) >= hostlen)
+		goto errout;
+
+	m += n;
+
 	if (sat->sat_range.r_netrange.nr_phase) {
-        	n = snprintf(host, hostlen, "%u.%u phase %u",
-		    ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node,
+        	n = snprintf(host+m, hostlen-m, " phase %u",
 			sat->sat_range.r_netrange.nr_phase);
-	} else {
-        	n = snprintf(host, hostlen, "%u.%u",
-		    ntohs(sat->sat_addr.s_net), sat->sat_addr.s_node);
+
+		if (n < 0 || (socklen_t)(m+n) >= hostlen)
+			goto errout;
+
+		m += n;
 	}
+	if (sat->sat_range.r_netrange.nr_firstnet) {
+        	n = snprintf(host+m, hostlen-m, " range %u - %u",
+			ntohs(sat->sat_range.r_netrange.nr_firstnet),
+			ntohs(sat->sat_range.r_netrange.nr_lastnet ));
+
+		if (n < 0 || (socklen_t)(m+n) >= hostlen)
+			goto errout;
 
-	if (n < 0 || (socklen_t) n >= hostlen) {
-		if (host != NULL && hostlen > 0)
-			*host = '\0';	/* XXX ??? */
-		return EAI_MEMORY;
+		m += n;
 	}
+
 	return 0;
+
+errout:
+	if (host && hostlen>0)
+		host[m] = '\0';	/* XXX ??? */
+
+	return EAI_MEMORY;
 }
 
 /*

Reply via email to