Module Name:    src
Committed By:   christos
Date:           Wed Dec  7 03:16:45 UTC 2016

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

Log Message:
make it always return a NUL terminated string instead of NULL when the address
is truncated for compatibility with others.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/lib/libc/net/linkaddr.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/linkaddr.c
diff -u src/lib/libc/net/linkaddr.c:1.19 src/lib/libc/net/linkaddr.c:1.20
--- src/lib/libc/net/linkaddr.c:1.19	Tue Dec  6 21:48:54 2016
+++ src/lib/libc/net/linkaddr.c	Tue Dec  6 22:16:45 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: linkaddr.c,v 1.19 2016/12/07 02:48:54 christos Exp $	*/
+/*	$NetBSD: linkaddr.c,v 1.20 2016/12/07 03:16:45 christos Exp $	*/
 
 /*-
  * Copyright (c) 1990, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)linkaddr.c	8.1 (Berkeley) 6/4/93";
 #else
-__RCSID("$NetBSD: linkaddr.c,v 1.19 2016/12/07 02:48:54 christos Exp $");
+__RCSID("$NetBSD: linkaddr.c,v 1.20 2016/12/07 03:16:45 christos Exp $");
 #endif
 #endif /* LIBC_SCCS and not lint */
 
@@ -148,16 +148,18 @@ link_ntoa(const struct sockaddr_dl *sdl)
 
 #define ADDC(ch) \
 	do { \
-		if (out >= obuf + sizeof(obuf)) \
-			return NULL; \
+		if (out >= obuf + sizeof(obuf) - 1) \
+			return obuf; \
 		*out++ = (ch); \
 	} while (/*CONSTCOND*/0)
 
 	if (sdl->sdl_nlen) {
 		if (sdl->sdl_nlen >= sizeof(obuf))
-			return NULL;
-		(void)memcpy(obuf, sdl->sdl_data, (size_t)sdl->sdl_nlen);
-		out += sdl->sdl_nlen;
+			i = sizeof(obuf) - 1;
+		else
+			i = sdl->sdl_nlen;
+		(void)memcpy(obuf, sdl->sdl_data, i);
+		out += i;
 		if (sdl->sdl_alen)
 			ADDC(':');
 	}
@@ -176,5 +178,5 @@ link_ntoa(const struct sockaddr_dl *sdl)
 			ADDC(hexlist[i]);
 	}
 	ADDC('\0');
-	return (obuf);
+	return obuf;
 }

Reply via email to