Fix macro API for __USE_KERNEL_IPV6_DEFS.

The use of __USE_KERNEL_IPV6_DEFS with ifndef is bad
practice per: https://sourceware.org/glibc/wiki/Wundef.
This change moves it to use 'if' and always define the
macro.

Please note that this is not the only problem with this
code. I have a series of fixes after this one to resolve
breakage with this code and add regression tests for it
via compile-only source testing (to be discussed in another
thread).

Unfortunately __USE_KERNEL_XATTR_DEFS is set by the kernel
and not glibc, and uses 'define', so we can't fix that yet.
This commit is contained in:
Carlos O'Donell 2016-06-02 23:30:11 -04:00
parent f06f3f05b4
commit 1c1e7fb658
3 changed files with 19 additions and 8 deletions

View File

@ -1,3 +1,12 @@
2016-06-02 Carlos O'Donell <carlos@redhat.com>
* sysdeps/unix/sysv/linux/bits/in.h [defined _UAPI_LINUX_IN6_H ||
defined _UAPI_IPV6_H]: Define __USE_KERNEL_IPV6_DEFS to 1.
[!(defined _UAPI_LINUX_IN6_H || defined _UAPI_IPV6_H)]: Define
__USE_KERNEL_IPV6_DEFS to 0.
* inet/netinet/in.h: Use '#if !__USE_KERNEL_IPV6_DEFS'.
Update comment.
2016-06-01 Florian Weimer <fweimer@redhat.com> 2016-06-01 Florian Weimer <fweimer@redhat.com>
[BZ #19861] [BZ #19861]

View File

@ -92,10 +92,10 @@ enum
IPPROTO_MAX IPPROTO_MAX
}; };
/* If __USE_KERNEL_IPV6_DEFS is defined then the user has included the kernel /* If __USE_KERNEL_IPV6_DEFS is 1 then the user has included the kernel
network headers first and we should use those ABI-identical definitions network headers first and we should use those ABI-identical definitions
instead of our own. */ instead of our own, otherwise 0. */
#ifndef __USE_KERNEL_IPV6_DEFS #if !__USE_KERNEL_IPV6_DEFS
enum enum
{ {
IPPROTO_HOPOPTS = 0, /* IPv6 Hop-by-Hop options. */ IPPROTO_HOPOPTS = 0, /* IPv6 Hop-by-Hop options. */
@ -206,7 +206,7 @@ enum
#define INADDR_ALLRTRS_GROUP ((in_addr_t) 0xe0000002) /* 224.0.0.2 */ #define INADDR_ALLRTRS_GROUP ((in_addr_t) 0xe0000002) /* 224.0.0.2 */
#define INADDR_MAX_LOCAL_GROUP ((in_addr_t) 0xe00000ff) /* 224.0.0.255 */ #define INADDR_MAX_LOCAL_GROUP ((in_addr_t) 0xe00000ff) /* 224.0.0.255 */
#ifndef __USE_KERNEL_IPV6_DEFS #if !__USE_KERNEL_IPV6_DEFS
/* IPv6 address */ /* IPv6 address */
struct in6_addr struct in6_addr
{ {
@ -249,7 +249,7 @@ struct sockaddr_in
sizeof (struct in_addr)]; sizeof (struct in_addr)];
}; };
#ifndef __USE_KERNEL_IPV6_DEFS #if !__USE_KERNEL_IPV6_DEFS
/* Ditto, for IPv6. */ /* Ditto, for IPv6. */
struct sockaddr_in6 struct sockaddr_in6
{ {
@ -285,7 +285,7 @@ struct ip_mreq_source
}; };
#endif #endif
#ifndef __USE_KERNEL_IPV6_DEFS #if !__USE_KERNEL_IPV6_DEFS
/* Likewise, for IPv6. */ /* Likewise, for IPv6. */
struct ipv6_mreq struct ipv6_mreq
{ {
@ -532,7 +532,7 @@ extern int bindresvport6 (int __sockfd, struct sockaddr_in6 *__sock_in)
#ifdef __USE_GNU #ifdef __USE_GNU
struct cmsghdr; /* Forward declaration. */ struct cmsghdr; /* Forward declaration. */
#ifndef __USE_KERNEL_IPV6_DEFS #if !__USE_KERNEL_IPV6_DEFS
/* IPv6 packet information. */ /* IPv6 packet information. */
struct in6_pktinfo struct in6_pktinfo
{ {

View File

@ -30,7 +30,9 @@
/* This is not quite the same API since the kernel always defines s6_addr16 and /* This is not quite the same API since the kernel always defines s6_addr16 and
s6_addr32. This is not a violation of POSIX since POSIX says "at least the s6_addr32. This is not a violation of POSIX since POSIX says "at least the
following member" and that holds true. */ following member" and that holds true. */
# define __USE_KERNEL_IPV6_DEFS # define __USE_KERNEL_IPV6_DEFS 1
#else
# define __USE_KERNEL_IPV6_DEFS 0
#endif #endif
/* Options for use with `getsockopt' and `setsockopt' at the IP level. /* Options for use with `getsockopt' and `setsockopt' at the IP level.