diff --git a/ChangeLog b/ChangeLog index 212fb6c149..ad891bedd3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,21 @@ 2011-12-03 Ulrich Drepper + * inet/netinet/in.h: Provide versions of IN6_IS_ADDR_UNSPECIFIED, + IN6_IS_ADDR_LOOPBACK, IN6_IS_ADDR_LINKLOCAL, IN6_IS_ADDR_SITELOCAL, + IN6_IS_ADDR_V4MAPPED, IN6_IS_ADDR_V4COMPAT, and IN6_ARE_ADDR_EQUAL + for gcc to avoid warnings. + * inet/Makefile (tests): Add tst-checks. + * inet/tst-checks.c: New file. + + * sysdeps/generic/dl-hash.h (_dl_elf_hash): Add attribute to avoid + warning. + + * sysdeps/x86_64/multiarch/wmemcmp-c.c: Provide prototype for + __wmemcmp_sse2. + + * sysdeps/x86_64/fpu/s_scalbln.c: Removed. + * sysdeps/x86_64/fpu/s_scalbn.c: Removed. + * malloc/mcheck.h: Fix use of incorrect encoding in comment. 2011-12-02 Ulrich Drepper diff --git a/inet/Makefile b/inet/Makefile index 37985940ae..12d573fa06 100644 --- a/inet/Makefile +++ b/inet/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1991-2006, 2007, 2009 Free Software Foundation, Inc. +# Copyright (C) 1991-2006, 2007, 2009, 2011 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -53,7 +53,7 @@ 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-ether_line \ - tst-getni1 tst-getni2 tst-inet6_rth + tst-getni1 tst-getni2 tst-inet6_rth tst-checks include ../Rules @@ -97,5 +97,5 @@ endif ifeq (yes,$(build-static-nss)) otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \ - $(resolvobjdir)/libresolv.a + $(resolvobjdir)/libresolv.a endif diff --git a/inet/netinet/in.h b/inet/netinet/in.h index 180227af5b..2c2c1847a2 100644 --- a/inet/netinet/in.h +++ b/inet/netinet/in.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2001, 2003, 2004, 2006, 2007, 2008 +/* Copyright (C) 1991-2001, 2003, 2004, 2006, 2007, 2008, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -396,44 +396,96 @@ extern uint16_t htons (uint16_t __hostshort) # endif #endif -#define IN6_IS_ADDR_UNSPECIFIED(a) \ +#ifdef __GNUC__ +# define IN6_IS_ADDR_UNSPECIFIED(a) \ + (__extension__ \ + ({ __const struct in6_addr *__a = (__const struct in6_addr *) (a); \ + __a->s6_addr32[0] == 0 \ + && __a->s6_addr32[1] == 0 \ + && __a->s6_addr32[2] == 0 \ + && __a->s6_addr32[3] == 0; })) + +# define IN6_IS_ADDR_LOOPBACK(a) \ + (__extension__ \ + ({ __const struct in6_addr *__a = (__const struct in6_addr *) (a); \ + __a->s6_addr32[0] == 0 \ + && __a->s6_addr32[1] == 0 \ + && __a->s6_addr32[2] == 0 \ + && __a->s6_addr32[3] == htonl (1); })) + +# define IN6_IS_ADDR_LINKLOCAL(a) \ + (__extension__ \ + ({ __const struct in6_addr *__a = (__const struct in6_addr *) (a); \ + (__a->s6_addr32[0] & htonl (0xffc00000)) == htonl (0xfe800000); })) + +# define IN6_IS_ADDR_SITELOCAL(a) \ + (__extension__ \ + ({ __const struct in6_addr *__a = (__const struct in6_addr *) (a); \ + (__a->s6_addr32[0] & htonl (0xffc00000)) == htonl (0xfec00000); })) + +# define IN6_IS_ADDR_V4MAPPED(a) \ + (__extension__ \ + ({ __const struct in6_addr *__a = (__const struct in6_addr *) (a); \ + __a->s6_addr32[0] == 0 \ + && __a->s6_addr32[1] == 0 \ + && __a->s6_addr32[2] == htonl (0xffff); })) + +# define IN6_IS_ADDR_V4COMPAT(a) \ + (__extension__ \ + ({ __const struct in6_addr *__a = (__const struct in6_addr *) (a); \ + __a->s6_addr32[0] == 0 \ + && __a->s6_addr32[1] == 0 \ + && __a->s6_addr32[2] == 0 \ + && ntohl (__a->s6_addr32[3]) > 1; })) + +# define IN6_ARE_ADDR_EQUAL(a,b) \ + (__extension__ \ + ({ __const struct in6_addr *__a = (__const struct in6_addr *) (a); \ + __const struct in6_addr *__b = (__const struct in6_addr *) (b); \ + __a->s6_addr32[0] == __b->s6_addr32[0] \ + && __a->s6_addr32[1] == __b->s6_addr32[1] \ + && __a->s6_addr32[2] == __b->s6_addr32[2] \ + && __a->s6_addr32[3] == __b->s6_addr32[3]; })) +#else +# define IN6_IS_ADDR_UNSPECIFIED(a) \ (((__const uint32_t *) (a))[0] == 0 \ && ((__const uint32_t *) (a))[1] == 0 \ && ((__const uint32_t *) (a))[2] == 0 \ && ((__const uint32_t *) (a))[3] == 0) -#define IN6_IS_ADDR_LOOPBACK(a) \ +# define IN6_IS_ADDR_LOOPBACK(a) \ (((__const uint32_t *) (a))[0] == 0 \ && ((__const uint32_t *) (a))[1] == 0 \ && ((__const uint32_t *) (a))[2] == 0 \ && ((__const uint32_t *) (a))[3] == htonl (1)) -#define IN6_IS_ADDR_MULTICAST(a) (((__const uint8_t *) (a))[0] == 0xff) - -#define IN6_IS_ADDR_LINKLOCAL(a) \ +# define IN6_IS_ADDR_LINKLOCAL(a) \ ((((__const uint32_t *) (a))[0] & htonl (0xffc00000)) \ == htonl (0xfe800000)) -#define IN6_IS_ADDR_SITELOCAL(a) \ +# define IN6_IS_ADDR_SITELOCAL(a) \ ((((__const uint32_t *) (a))[0] & htonl (0xffc00000)) \ == htonl (0xfec00000)) -#define IN6_IS_ADDR_V4MAPPED(a) \ +# define IN6_IS_ADDR_V4MAPPED(a) \ ((((__const uint32_t *) (a))[0] == 0) \ && (((__const uint32_t *) (a))[1] == 0) \ && (((__const uint32_t *) (a))[2] == htonl (0xffff))) -#define IN6_IS_ADDR_V4COMPAT(a) \ +# define IN6_IS_ADDR_V4COMPAT(a) \ ((((__const uint32_t *) (a))[0] == 0) \ && (((__const uint32_t *) (a))[1] == 0) \ && (((__const uint32_t *) (a))[2] == 0) \ && (ntohl (((__const uint32_t *) (a))[3]) > 1)) -#define IN6_ARE_ADDR_EQUAL(a,b) \ +# define IN6_ARE_ADDR_EQUAL(a,b) \ ((((__const uint32_t *) (a))[0] == ((__const uint32_t *) (b))[0]) \ && (((__const uint32_t *) (a))[1] == ((__const uint32_t *) (b))[1]) \ && (((__const uint32_t *) (a))[2] == ((__const uint32_t *) (b))[2]) \ && (((__const uint32_t *) (a))[3] == ((__const uint32_t *) (b))[3])) +#endif + +#define IN6_IS_ADDR_MULTICAST(a) (((__const uint8_t *) (a))[0] == 0xff) #if defined __USE_MISC || defined __USE_GNU /* Bind socket to a privileged IP port. */ diff --git a/inet/tst-checks.c b/inet/tst-checks.c new file mode 100644 index 0000000000..5d97564cd6 --- /dev/null +++ b/inet/tst-checks.c @@ -0,0 +1,173 @@ +#include +#include +#include + + +static int +do_test (void) +{ + int result = 0; + char buf[16]; + memset (buf, '\0', 16); + + if (! IN6_IS_ADDR_UNSPECIFIED (buf)) + { + puts ("positive IN6_IS_ADDR_UNSPECIFIED failed"); + result = 1; + } + for (size_t i = 0; i < 16; ++i) + { + buf[i] = 1; + if (IN6_IS_ADDR_UNSPECIFIED (buf)) + { + printf ("negative IN6_IS_ADDR_UNSPECIFIED with byte %zu failed\n", + i); + result = 1; + } + buf[i] = 0; + } + + if (IN6_IS_ADDR_LOOPBACK (buf)) + { + puts ("negative IN6_IS_ADDR_UNSPECIFIED failed"); + result = 1; + } + buf[15] = 1; + if (! IN6_IS_ADDR_LOOPBACK (buf)) + { + puts ("positive IN6_IS_ADDR_UNSPECIFIED failed"); + result = 1; + } + buf[15] = 0; + + buf[0] = 0xfe; + buf[1] = 0x80; + if (! IN6_IS_ADDR_LINKLOCAL (buf)) + { + puts ("positive IN6_IS_ADDR_LINKLOCAL failed"); + result = 1; + } + for (size_t i = 1; i < 16; ++i) + { + buf[i] ^= 1; + if (! IN6_IS_ADDR_LINKLOCAL (buf)) + { + printf ("positive IN6_IS_ADDR_LINKLOCAL byte %zu failed\n", i); + result = 1; + } + buf[i] ^= 1; + } + buf[0] = 0xff; + buf[1] = 0x80; + if (IN6_IS_ADDR_LINKLOCAL (buf)) + { + puts ("negative IN6_IS_ADDR_LINKLOCAL failed"); + result = 1; + } + buf[0] = 0xfe; + buf[1] = 0xc0; + if (IN6_IS_ADDR_LINKLOCAL (buf)) + { + puts ("negative IN6_IS_ADDR_LINKLOCAL #2 failed"); + result = 1; + } + + buf[0] = 0xfe; + buf[1] = 0xc0; + if (! IN6_IS_ADDR_SITELOCAL (buf)) + { + puts ("positive IN6_IS_ADDR_SITELOCAL failed"); + result = 1; + } + for (size_t i = 1; i < 16; ++i) + { + buf[i] ^= 1; + if (! IN6_IS_ADDR_SITELOCAL (buf)) + { + printf ("positive IN6_IS_ADDR_SITELOCAL byte %zu failed\n", i); + result = 1; + } + buf[i] ^= 1; + } + buf[0] = 0xff; + buf[1] = 0x80; + if (IN6_IS_ADDR_SITELOCAL (buf)) + { + puts ("negative IN6_IS_ADDR_SITELOCAL failed"); + result = 1; + } + buf[0] = 0xf8; + buf[1] = 0xc0; + if (IN6_IS_ADDR_SITELOCAL (buf)) + { + puts ("negative IN6_IS_ADDR_SITELOCAL #2 failed"); + result = 1; + } + + memset (buf, '\0', 16); + buf[10] = 0xff; + buf[11] = 0xff; + if (! IN6_IS_ADDR_V4MAPPED (buf)) + { + puts ("positive IN6_IS_ADDR_V4MAPPED failed"); + result = 1; + } + for (size_t i = 12; i < 16; ++i) + { + buf[i] ^= 1; + if (! IN6_IS_ADDR_V4MAPPED (buf)) + { + printf ("positive IN6_IS_ADDR_V4MAPPED byte %zu failed\n", i); + result = 1; + } + buf[i] ^= 1; + } + for (size_t i = 0; i < 12; ++i) + { + buf[i] ^= 1; + if (IN6_IS_ADDR_V4MAPPED (buf)) + { + printf ("negative IN6_IS_ADDR_V4MAPPED byte %zu failed\n", i); + result = 1; + } + buf[i] ^= 1; + } + + memset (buf, '\0', 16); + for (size_t i = 12; i < 16; ++i) + { + buf[i] ^= 2; + if (! IN6_IS_ADDR_V4COMPAT (buf)) + { + printf ("positive IN6_IS_ADDR_V4COMPAT byte %zu failed\n", i); + result = 1; + } + buf[i] ^= 2; + } + for (size_t i = 0; i < 12; ++i) + { + buf[i] ^= 1; + if (IN6_IS_ADDR_V4COMPAT (buf)) + { + printf ("negative IN6_IS_ADDR_V4COMPAT byte %zu failed\n", i); + result = 1; + } + buf[i] ^= 1; + } + if (IN6_IS_ADDR_V4COMPAT (buf)) + { + puts ("negative IN6_IS_ADDR_V4COMPAT #2 failed"); + result = 1; + } + buf[15] = 1; + if (IN6_IS_ADDR_V4COMPAT (buf)) + { + puts ("negative IN6_IS_ADDR_V4COMPAT #3 failed"); + result = 1; + } + + return result; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/libidn/ChangeLog b/libidn/ChangeLog index 15efe0e88f..a718a9f2a3 100644 --- a/libidn/ChangeLog +++ b/libidn/ChangeLog @@ -1,3 +1,7 @@ +2011-12-03 Ulrich Drepper + + * idna.c (idna_to_unicode_4z4z): Remove variable rc. + 2008-02-10 Jim Meyering * stringprep.c (stringprep, stringprep_profile): Remove useless diff --git a/libidn/idna.c b/libidn/idna.c index cf95291596..f93b90368b 100644 --- a/libidn/idna.c +++ b/libidn/idna.c @@ -1,5 +1,5 @@ /* idna.c Convert to or from IDN strings. - * Copyright (C) 2002, 2003, 2004 Simon Josefsson + * Copyright (C) 2002, 2003, 2004, 2011 Simon Josefsson * * This file is part of GNU Libidn. * @@ -614,7 +614,6 @@ idna_to_unicode_4z4z (const uint32_t * input, uint32_t ** output, int flags) size_t buflen; uint32_t *out = NULL; size_t outlen = 0; - int rc; *output = NULL; @@ -630,8 +629,8 @@ idna_to_unicode_4z4z (const uint32_t * input, uint32_t ** output, int flags) if (!buf) return IDNA_MALLOC_ERROR; - rc = idna_to_unicode_44i (start, end - start, buf, &buflen, flags); - /* don't check rc as per specification! */ + idna_to_unicode_44i (start, end - start, buf, &buflen, flags); + /* don't check return value as per specification! */ if (out) { diff --git a/sysdeps/generic/dl-hash.h b/sysdeps/generic/dl-hash.h index 243ae14b51..37a7a42ced 100644 --- a/sysdeps/generic/dl-hash.h +++ b/sysdeps/generic/dl-hash.h @@ -1,5 +1,5 @@ /* Compute hash value for given string according to ELF standard. - Copyright (C) 1995,1996,1997,1998,2003,2005 Free Software Foundation, Inc. + Copyright (C) 1995-1998,2003,2005,2011 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -25,6 +25,7 @@ first five operations no overflow is possible so we optimized it a bit. */ static unsigned int +__attribute__ ((used)) _dl_elf_hash (const char *name_arg) { const unsigned char *name = (const unsigned char *) name_arg; diff --git a/sysdeps/x86_64/fpu/s_scalbln.c b/sysdeps/x86_64/fpu/s_scalbln.c deleted file mode 100644 index 1009713fbc..0000000000 --- a/sysdeps/x86_64/fpu/s_scalbln.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Nothing to do. This function is the same as scalbn. So we define an - alias. */ diff --git a/sysdeps/x86_64/fpu/s_scalbn.c b/sysdeps/x86_64/fpu/s_scalbn.c deleted file mode 100644 index 74d34655ad..0000000000 --- a/sysdeps/x86_64/fpu/s_scalbn.c +++ /dev/null @@ -1,9 +0,0 @@ -#define scalbln __renamed_scalbln -#define __scalbln __renamed___scalbln - -#include - -#undef scalbln -#undef __scalbln -strong_alias (__scalbn, __scalbln) -weak_alias (__scalbn, scalbln) diff --git a/sysdeps/x86_64/multiarch/wmemcmp-c.c b/sysdeps/x86_64/multiarch/wmemcmp-c.c index 793f059aff..1074238daf 100644 --- a/sysdeps/x86_64/multiarch/wmemcmp-c.c +++ b/sysdeps/x86_64/multiarch/wmemcmp-c.c @@ -1,5 +1,9 @@ #ifndef NOT_IN_libc +# include + # define WMEMCMP __wmemcmp_sse2 + +extern __typeof (wmemcmp) __wmemcmp_sse2; #endif #include "wcsmbs/wmemcmp.c"