Revert "net: Support inclusion of <linux/socket.h> before <sys/socket.h>"
Subsystems (3)
PATCH 1/1 Revert "net: Support inclusion of <linux/socket.h> before <sys/socket.h>"
This reverts commit 9c501935a3cdcf6b1d35aaee3aa11c7a7051a305. That commit caused <linux/rtnetlink.h> to require that <sys/socket.h> is included first, breaking autoconf tests for <linux/rtnetlink.h> and presumably some real programs too.
---
Please apply this to net-2.6.
I'm not sure what the proper solution is; maybe make <linux/socket.h> include <sys/socket.h> if __KERNEL__ is not defined?
Ben.
include/linux/socket.h | 21 ++++++++++++++++++--- 1 files changed, 18 insertions(+), 3 deletions(-)
include/linux/socket.h +18 -3
@@ -16,7 +16,7 @@ struct __kernel_sockaddr_storage {/* _SS_MAXSIZE value minus size of ss_family */ } __attribute__ ((aligned(_K_SS_ALIGNSIZE))); /* force desired alignment */ -#ifdef __KERNEL__ +#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ <2 )#include <asm/socket.h> /* arch-dependent defines */ #include <linux/sockios.h> /* the SIOCxxx I/O controls */
@@ -101,6 +101,21 @@ struct cmsghdr { ((char *)(cmsg) - (char *)(mhdr)->msg_control)))/* +* This mess will go away with glibc +*/ + +#ifdef __KERNEL__ +#define __KINLINE static inline +#elif defined(__GNUC__) +#define __KINLINE static __inline__ +#elif defined(__cplusplus) +#define __KINLINE static inline +#else +#define __KINLINE static +#endif + + +/* * Get the next cmsg header * * PLEASE, do not touch this function. If you think, that it is
@@ -113,7 +128,7 @@ struct cmsghdr {* ancillary object DATA. --ANK (980731) */ -static inline struct cmsghdr *__cmsg_nxthdr (void *__ctl,__kernel_size_t __size, +__KINLINE struct cmsghdr * __cmsg_nxthdr(void *__ctl, __kernel_size_t __size,struct cmsghdr *__cmsg) {struct cmsghdr * __ptr;
@@ -125,7 +140,7 @@ static inline struct cmsghdr * __cmsg_nxthdr(void *__ctl, __kernel_size_t __sizereturn __ptr; } -static inline struct cmsghdr *cmsg_nxthdr (struct msghdr *__msg,struct cmsghdr *__cmsg) +__KINLINE struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__cmsg) {return __cmsg_nxthdr (__msg->msg_control, __msg->msg_controllen, __cmsg); }
Signature · 1 line
1.6.5.2
David Miller
maintainerFrom: Ben Hutchings <[email protected]>
Date: Thu, 12 Nov 2009 02:00:05 +0000
Quoted 6 lines
This reverts commit
9c501935a3cdcf6b1d35aaee3aa11c7a7051a305. That commit caused <linux/rtnetlink.h> to require that <sys/socket.h> is included first, breaking autoconf tests for <linux/rtnetlink.h> and presumably some real programs too.Signed-off-by Ben Hutchings <[email protected]>
I'm not reverting this Ben. The dependency those programs and autoconf tests have is _dubious_ at best.
It means they were depending upon the libc5 checks passing, that's rediculious and not something we should cater to.
If you really want it to work that linux/rtnetlink.h is included first before sys/socket.h in userland, fix that specifically instead. But I believe such a dependency is reasonable and the userspace bits need fixing.
Quoted 8 lines · David Miller
From: Ben Hutchings <[email protected]>
Date: Thu, 12 Nov 2009 02:00:05 +0000Quoted 5 lines
This reverts commit
9c501935a3cdcf6b1d35aaee3aa11c7a7051a305. That commit caused <linux/rtnetlink.h> to require that <sys/socket.h> is included first, breaking autoconf tests for <linux/rtnetlink.h> and presumably some real programs too.
Quoted 7 lines
Quoted 1 line
Signed-off-by Ben Hutchings <[email protected]>I'm not reverting this Ben. The dependency those programs and autoconf tests have is _dubious_ at best.
It means they were depending upon the libc5 checks passing, that's rediculious and not something we should cater to.
[...]
Sorry, I'm getting my headers mixed up. The problem is with <linux/netlink.h> not <linux/rtnetlink.h>.
<linux/netlink.h> will not compile for userland, because <linux/socket.h> is no longer defining sa_family_t. For userland, this should be defined by <sys/socket.h>.
Ben.
Signature · 3 lines
Ben Hutchings
Lowery's Law:
If it jams, force it. If it breaks, it needed replacing anyway.David Miller
maintainerFrom: Ben Hutchings <[email protected]>
Date: Thu, 12 Nov 2009 03:05:15 +0000
Quoted 3 lines
<
linux/netlink.h> will not compile for userland, because <linux/socket.h> is no longer definingsa_family_t. For userland, this should be defined by <sys/socket.h>.
Still, you still essentially have two choices:
1) Tell userland, sorry you need to include sys/socket.h before other "socket stuff" and that means linux/netlink.h in particular
2) Put a !__KERNEL__ sys/socket.h include in there, but that's asking for trouble.
Ok?
Quoted 7 lines · David Miller
From: Ben Hutchings <[email protected]>
Date: Thu, 12 Nov 2009 03:05:15 +0000Quoted 3 lines
<
linux/netlink.h> will not compile for userland, because <linux/socket.h> is no longer definingsa_family_t. For userland, this should be defined by <sys/socket.h>.
Quoted 5 lines
Still, you still essentially have two choices:
1) Tell userland, sorry you need to include
sys/socket.hbefore other "socket stuff" and that meanslinux/netlink.hin particular
Which is just nasty; headers should include everything they need.
Quoted 2 lines
2) Put a !__KERNEL__
sys/socket.hinclude in there, but that's asking for trouble.
Indeed.
Including <bits/sockaddr.h> would get us exactly what we need, but that's not meant to be included directly.
Ulrich, can you make any suggestions as to how we can resolve this?
Ben.
Signature · 3 lines
Ben Hutchings
Lowery's Law:
If it jams, force it. If it breaks, it needed replacing anyway.