This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.24-458-g0abbe7c


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  0abbe7cd700951082b314182a0958d65238297ef (commit)
      from  c23de0aacbeaa7a091609b35764bed931475a16d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=0abbe7cd700951082b314182a0958d65238297ef

commit 0abbe7cd700951082b314182a0958d65238297ef
Author: Florian Weimer <fweimer@redhat.com>
Date:   Fri Dec 9 11:27:44 2016 +0100

    inet: Make IN6_IS_ADDR_UNSPECIFIED etc. usable with POSIX [BZ #16421]
    
    Previously, under some feature test macros and compilers, the
    macros were defined, but references undefined struct members
    in their implementation.

diff --git a/ChangeLog b/ChangeLog
index fa3c109..5a9191a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2016-12-09  Carlos O'Donell  <carlos@redhat.com>
+	    Florian Weimer  <fweimer@redhat.com>
+
+	[BZ #16421]
+	* inet/netinet/in.h (struct in6_addr): Always define __u6_addr16
+	and __u6_addr32 members.
+	(IN6_IS_ADDR_UNSPECIFIED, IN6_IS_ADDR_LOOPBACK)
+	(IN6_IS_ADDR_LINKLOCAL, IN6_IS_ADDR_SITELOCAL)
+	(IN6_IS_ADDR_V4MAPPED, IN6_IS_ADDR_V4COMPAT, IN6_ARE_ADDR_EQUAL):
+	Use __u6_addr32.
+	* inet/tst-checks.c: Use <support/test-driver.c>
+	* inet/tst-checks-posix.c: New file.
+	* inet/Makefile (tests): Add it.
+	(CFLAGS-tst-checks-posix.c): Compile in C99 mode.
+
 2016-12-09  Florian Weimer  <fweimer@redhat.com>
 
 	New subdirectory support for build and test infrastructure.
diff --git a/inet/Makefile b/inet/Makefile
index 1c30932..c82ad92 100644
--- a/inet/Makefile
+++ b/inet/Makefile
@@ -51,8 +51,8 @@ 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-checks tst-sockaddr \
-	 tst-inet6_scopeid_pton
+	 tst-getni1 tst-getni2 tst-inet6_rth tst-checks tst-checks-posix \
+	 tst-sockaddr tst-inet6_scopeid_pton
 
 include ../Rules
 
@@ -86,6 +86,7 @@ CFLAGS-either_hton.c = -fexceptions
 CFLAGS-getnetgrent.c = -fexceptions
 CFLAGS-getnetgrent_r.c = -fexceptions
 
+CFLAGS-tst-checks-posix.c = -std=c99
 CFLAGS-tst-sockaddr.c = -fno-strict-aliasing
 
 endif
diff --git a/inet/netinet/in.h b/inet/netinet/in.h
index c801593..01594c6 100644
--- a/inet/netinet/in.h
+++ b/inet/netinet/in.h
@@ -213,10 +213,8 @@ struct in6_addr
     union
       {
 	uint8_t	__u6_addr8[16];
-#ifdef __USE_MISC
 	uint16_t __u6_addr16[8];
 	uint32_t __u6_addr32[4];
-#endif
       } __in6_u;
 #define s6_addr			__in6_u.__u6_addr8
 #ifdef __USE_MISC
@@ -411,52 +409,52 @@ extern uint16_t htons (uint16_t __hostshort)
 # 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; }))
+      __a->__in6_u.__u6_addr32[0] == 0					      \
+      && __a->__in6_u.__u6_addr32[1] == 0				      \
+      && __a->__in6_u.__u6_addr32[2] == 0				      \
+      && __a->__in6_u.__u6_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); }))
+      __a->__in6_u.__u6_addr32[0] == 0					      \
+      && __a->__in6_u.__u6_addr32[1] == 0				      \
+      && __a->__in6_u.__u6_addr32[2] == 0				      \
+      && __a->__in6_u.__u6_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); }))
+      (__a->__in6_u.__u6_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); }))
+      (__a->__in6_u.__u6_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); }))
+      __a->__in6_u.__u6_addr32[0] == 0					      \
+      && __a->__in6_u.__u6_addr32[1] == 0				      \
+      && __a->__in6_u.__u6_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; }))
+      __a->__in6_u.__u6_addr32[0] == 0					      \
+      && __a->__in6_u.__u6_addr32[1] == 0				      \
+      && __a->__in6_u.__u6_addr32[2] == 0				      \
+      && ntohl (__a->__in6_u.__u6_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]; }))
+      __a->__in6_u.__u6_addr32[0] == __b->__in6_u.__u6_addr32[0]	      \
+      && __a->__in6_u.__u6_addr32[1] == __b->__in6_u.__u6_addr32[1]	      \
+      && __a->__in6_u.__u6_addr32[2] == __b->__in6_u.__u6_addr32[2]	      \
+      && __a->__in6_u.__u6_addr32[3] == __b->__in6_u.__u6_addr32[3]; }))
 #else
 # define IN6_IS_ADDR_UNSPECIFIED(a) \
 	(((const uint32_t *) (a))[0] == 0				      \
diff --git a/inet/tst-checks-posix.c b/inet/tst-checks-posix.c
new file mode 100644
index 0000000..c41a180
--- /dev/null
+++ b/inet/tst-checks-posix.c
@@ -0,0 +1,24 @@
+/* Test IPv6 classification macros in POSIX mode.
+   Copyright (C) 2016 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Process tst-checks.c in POSIX mode.  */
+#undef _GNU_SOURCE
+#define _POSIX_C_SOURCE 200112L
+#define _ISOMAC
+
+#include "tst-checks.c"
diff --git a/inet/tst-checks.c b/inet/tst-checks.c
index 5d97564..1a4785d 100644
--- a/inet/tst-checks.c
+++ b/inet/tst-checks.c
@@ -169,5 +169,4 @@ do_test (void)
   return result;
 }
 
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
+#include <support/test-driver.c>

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                   |   15 +++++++++
 inet/Makefile                               |    5 ++-
 inet/netinet/in.h                           |   44 +++++++++++++--------------
 math/fegetmode.c => inet/tst-checks-posix.c |   15 ++++-----
 inet/tst-checks.c                           |    3 +-
 5 files changed, 46 insertions(+), 36 deletions(-)
 copy math/fegetmode.c => inet/tst-checks-posix.c (81%)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]