about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog16
-rw-r--r--inet/Makefile6
-rw-r--r--inet/netinet/in.h72
-rw-r--r--inet/tst-checks.c173
-rw-r--r--libidn/ChangeLog4
-rw-r--r--libidn/idna.c7
-rw-r--r--sysdeps/generic/dl-hash.h3
-rw-r--r--sysdeps/x86_64/fpu/s_scalbln.c2
-rw-r--r--sysdeps/x86_64/fpu/s_scalbn.c9
-rw-r--r--sysdeps/x86_64/multiarch/wmemcmp-c.c4
10 files changed, 267 insertions, 29 deletions
diff --git a/ChangeLog b/ChangeLog
index 212fb6c149..ad891bedd3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,21 @@
 2011-12-03  Ulrich Drepper  <drepper@gmail.com>
 
+	* 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  <drepper@gmail.com>
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 <stdio.h>
+#include <string.h>
+#include <netinet/in.h>
+
+
+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  <drepper@gmail.com>
+
+	* idna.c (idna_to_unicode_4z4z): Remove variable rc.
+
 2008-02-10  Jim Meyering  <meyering@redhat.com>
 
 	* 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 <sysdeps/ieee754/dbl-64/wordsize-64/s_scalbn.c>
-
-#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 <wchar.h>
+
 # define WMEMCMP  __wmemcmp_sse2
+
+extern __typeof (wmemcmp) __wmemcmp_sse2;
 #endif
 
 #include "wcsmbs/wmemcmp.c"