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).
This commit is contained in:
Julio Merino 2014-03-12 12:27:13 +00:00
parent b209f5fa38
commit 76a1f42f3f

View File

@ -72,11 +72,13 @@ ether_line(const char *l, struct ether_addr *e, char *hostname)
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);
}
}
/*