diff options
author | Ulrich Drepper <drepper@redhat.com> | 2007-12-07 16:50:11 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2007-12-07 16:50:11 +0000 |
commit | 26e21e7554ca5bbc719d5b018e26d5eb621c9e2e (patch) | |
tree | cba97f6eef732d9fbacf1cc5205f8e3eeeb8c1f1 /inet | |
parent | c9d65f0fbdf83d13e85a82d0b7b564d343a3c64b (diff) | |
download | glibc-26e21e7554ca5bbc719d5b018e26d5eb621c9e2e.tar.gz glibc-26e21e7554ca5bbc719d5b018e26d5eb621c9e2e.tar.xz glibc-26e21e7554ca5bbc719d5b018e26d5eb621c9e2e.zip |
[BZ #5441, BZ #5452, BZ #5454]
2007-12-07 Ulrich Drepper <drepper@redhat.com> [BZ #5441] * stdio-common/vfscanf.c (_IO_vfwscanf): Don't free ptrs_to_free structure, it's allocated with alloca. * stdio-common/Makefile (tests): Add bug21. * stdio-common/bug21.c: New file. 2007-12-06 Aurelien Jarno <aurelien@aurel32.net> [BZ #5452] * sysdeps/unix/sysv/linux/bits/sched.h: Use __extension__ keyword for gcc's braced-groups. 2007-12-07 Ulrich Drepper <drepper@redhat.com> [BZ #5454] * inet/ether_line.c: Strip hostname of whitespaces. * inet/Makefile (tests): Add tst-ether_line. * inet/tst-ether_line.c: New file.
Diffstat (limited to 'inet')
-rw-r--r-- | inet/Makefile | 2 | ||||
-rw-r--r-- | inet/ether_line.c | 15 | ||||
-rw-r--r-- | inet/tst-ether_line.c | 38 |
3 files changed, 47 insertions, 8 deletions
diff --git a/inet/Makefile b/inet/Makefile index 2250cc6e8c..d7139c1d7f 100644 --- a/inet/Makefile +++ b/inet/Makefile @@ -52,7 +52,7 @@ routines := htonl htons \ aux := check_pf check_native ifreq tests := htontest test_ifindex tst-ntoa tst-ether_aton tst-network \ - tst-gethnm test-ifaddrs bug-if1 test-inet6_opt + tst-gethnm test-ifaddrs bug-if1 test-inet6_opt tst-ether_line include ../Rules diff --git a/inet/ether_line.c b/inet/ether_line.c index 7e871a6bd7..13c5f394cf 100644 --- a/inet/ether_line.c +++ b/inet/ether_line.c @@ -61,19 +61,20 @@ ether_line (const char *line, struct ether_addr *addr, char *hostname) ++line; } - /* Remove trailing white space. */ - cp = __strchrnul (line, '#'); - while (cp > line && isspace (cp[-1])) - --cp; + /* Skip initial whitespace. */ + while (isspace (*line)) + ++line; - if (cp == line) + if (*line == '#' || *line == '\0') /* No hostname. */ return -1; + /* The hostname is up to the next non-space character. */ /* XXX This can cause trouble because the hostname might be too long but we have no possibility to check it here. */ - memcpy (hostname, line, cp - line); - hostname [cp - line] = '\0'; + while (*line != '\0' && *line != '#' && !isspace (*line)) + *hostname++ = *line++; + *hostname = '\0'; return 0; } diff --git a/inet/tst-ether_line.c b/inet/tst-ether_line.c new file mode 100644 index 0000000000..ff0560b16a --- /dev/null +++ b/inet/tst-ether_line.c @@ -0,0 +1,38 @@ +#include <stdio.h> +#include <string.h> +#include <netinet/ether.h> + + +static int +do_test (void) +{ + struct ether_addr a; + char buf[1000]; + if (ether_line ("00:01:02:03:04:05 aaaaa \n", &a, buf) != 0) + { + puts ("ether_line failed"); + return 1; + } + + int res = 0; + int i; + for (i = 0; i < ETH_ALEN; ++i) + { + printf ("%02x%s", + (int) a.ether_addr_octet[i], i + 1 == ETH_ALEN ? "" : ":"); + if (a.ether_addr_octet[i] != i) + { + printf ("octet %d is %d, expected %d\n", + i, (int) a.ether_addr_octet[i], i); + res = 1; + } + } + + printf (" \"%s\"\n", buf); + res |= strcmp (buf, "aaaaa") != 0; + + return res; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" |