svn commit: r263090 - head/lib/libc/net

Julio Merino jmmv at FreeBSD.org
Wed Mar 12 12:27:14 UTC 2014


Author: jmmv
Date: Wed Mar 12 12:27:13 2014
New Revision: 263090
URL: http://svnweb.freebsd.org/changeset/base/263090

Log:
  Make ether_line really report an error when all input is invalid.
  
  The previous code failed to return an error condition when the whole input
  was invalid due to improper handling of the sscanf return value.  Actually,
  this failure was properly being caught by a test in
  tools/regression/lib/libc/net/test-ether.t but was not noticed because
  these tests are never run.  (On my way to fixing that ;-)
  
  The fix applied here resembles the implementation of ether_line in NetBSD
  modulo the setting of an errno value (which is not documented as an
  expectation in the manpage anyway).

Modified:
  head/lib/libc/net/ether_addr.c

Modified: head/lib/libc/net/ether_addr.c
==============================================================================
--- head/lib/libc/net/ether_addr.c	Wed Mar 12 11:53:35 2014	(r263089)
+++ head/lib/libc/net/ether_addr.c	Wed Mar 12 12:27:13 2014	(r263090)
@@ -72,11 +72,13 @@ ether_line(const char *l, struct ether_a
 
 	i = sscanf(l, "%x:%x:%x:%x:%x:%x %s", &o[0], &o[1], &o[2], &o[3],
 	    &o[4], &o[5], hostname);
-	if (i != 7)
-		return (i);
-	for (i=0; i<6; i++)
-		e->octet[i] = o[i];
-	return (0);
+	if (i == 7) {
+		for (i = 0; i < 6; i++)
+			e->octet[i] = o[i];
+		return (0);
+	} else {
+		return (-1);
+	}
 }
 
 /*


More information about the svn-src-head mailing list