mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
Linux: Use in-tree copy of SO_ constants for !__USE_MISC [BZ #24532]
The kernel changes for a 64-bit time_t on 32-bit architectures resulted in <asm/socket.h> indirectly including <linux/posix_types.h>. The latter is not namespace-clean for the POSIX version of <sys/socket.h>. This issue has persisted across several Linux releases, so this commit creates our own copy of the SO_* definitions for !__USE_MISC mode. The new test socket/tst-socket-consts ensures that the copy is consistent with the kernel definitions (which vary across architectures). The test is tricky to get right because CPPFLAGS includes include/libc-symbols.h, which in turn defines _GNU_SOURCE unconditionally. Tested with build-many-glibcs.py. I verified that a discrepancy in the definitions actually results in a failure of the socket/tst-socket-consts test.
This commit is contained in:
@ -349,98 +349,12 @@ struct ucred
|
||||
};
|
||||
#endif
|
||||
|
||||
/* Ugly workaround for unclean kernel headers. */
|
||||
#ifndef __USE_MISC
|
||||
# ifndef FIOGETOWN
|
||||
# define __SYS_SOCKET_H_undef_FIOGETOWN
|
||||
# endif
|
||||
# ifndef FIOSETOWN
|
||||
# define __SYS_SOCKET_H_undef_FIOSETOWN
|
||||
# endif
|
||||
# ifndef SIOCATMARK
|
||||
# define __SYS_SOCKET_H_undef_SIOCATMARK
|
||||
# endif
|
||||
# ifndef SIOCGPGRP
|
||||
# define __SYS_SOCKET_H_undef_SIOCGPGRP
|
||||
# endif
|
||||
# ifndef SIOCGSTAMP
|
||||
# define __SYS_SOCKET_H_undef_SIOCGSTAMP
|
||||
# endif
|
||||
# ifndef SIOCGSTAMPNS
|
||||
# define __SYS_SOCKET_H_undef_SIOCGSTAMPNS
|
||||
# endif
|
||||
# ifndef SIOCSPGRP
|
||||
# define __SYS_SOCKET_H_undef_SIOCSPGRP
|
||||
# endif
|
||||
#endif
|
||||
#ifndef IOCSIZE_MASK
|
||||
# define __SYS_SOCKET_H_undef_IOCSIZE_MASK
|
||||
#endif
|
||||
#ifndef IOCSIZE_SHIFT
|
||||
# define __SYS_SOCKET_H_undef_IOCSIZE_SHIFT
|
||||
#endif
|
||||
#ifndef IOC_IN
|
||||
# define __SYS_SOCKET_H_undef_IOC_IN
|
||||
#endif
|
||||
#ifndef IOC_INOUT
|
||||
# define __SYS_SOCKET_H_undef_IOC_INOUT
|
||||
#endif
|
||||
#ifndef IOC_OUT
|
||||
# define __SYS_SOCKET_H_undef_IOC_OUT
|
||||
#endif
|
||||
|
||||
/* Get socket manipulation related informations from kernel headers. */
|
||||
#include <asm/socket.h>
|
||||
|
||||
#ifndef __USE_MISC
|
||||
# ifdef __SYS_SOCKET_H_undef_FIOGETOWN
|
||||
# undef __SYS_SOCKET_H_undef_FIOGETOWN
|
||||
# undef FIOGETOWN
|
||||
# endif
|
||||
# ifdef __SYS_SOCKET_H_undef_FIOSETOWN
|
||||
# undef __SYS_SOCKET_H_undef_FIOSETOWN
|
||||
# undef FIOSETOWN
|
||||
# endif
|
||||
# ifdef __SYS_SOCKET_H_undef_SIOCATMARK
|
||||
# undef __SYS_SOCKET_H_undef_SIOCATMARK
|
||||
# undef SIOCATMARK
|
||||
# endif
|
||||
# ifdef __SYS_SOCKET_H_undef_SIOCGPGRP
|
||||
# undef __SYS_SOCKET_H_undef_SIOCGPGRP
|
||||
# undef SIOCGPGRP
|
||||
# endif
|
||||
# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMP
|
||||
# undef __SYS_SOCKET_H_undef_SIOCGSTAMP
|
||||
# undef SIOCGSTAMP
|
||||
# endif
|
||||
# ifdef __SYS_SOCKET_H_undef_SIOCGSTAMPNS
|
||||
# undef __SYS_SOCKET_H_undef_SIOCGSTAMPNS
|
||||
# undef SIOCGSTAMPNS
|
||||
# endif
|
||||
# ifdef __SYS_SOCKET_H_undef_SIOCSPGRP
|
||||
# undef __SYS_SOCKET_H_undef_SIOCSPGRP
|
||||
# undef SIOCSPGRP
|
||||
# endif
|
||||
#endif
|
||||
#ifdef __SYS_SOCKET_H_undef_IOCSIZE_MASK
|
||||
# undef __SYS_SOCKET_H_undef_IOCSIZE_MASK
|
||||
# undef IOCSIZE_MASK
|
||||
#endif
|
||||
#ifdef __SYS_SOCKET_H_undef_IOCSIZE_SHIFT
|
||||
# undef __SYS_SOCKET_H_undef_IOCSIZE_SHIFT
|
||||
# undef IOCSIZE_SHIFT
|
||||
#endif
|
||||
#ifdef __SYS_SOCKET_H_undef_IOC_IN
|
||||
# undef __SYS_SOCKET_H_undef_IOC_IN
|
||||
# undef IOC_IN
|
||||
#endif
|
||||
#ifdef __SYS_SOCKET_H_undef_IOC_INOUT
|
||||
# undef __SYS_SOCKET_H_undef_IOC_INOUT
|
||||
# undef IOC_INOUT
|
||||
#endif
|
||||
#ifdef __SYS_SOCKET_H_undef_IOC_OUT
|
||||
# undef __SYS_SOCKET_H_undef_IOC_OUT
|
||||
# undef IOC_OUT
|
||||
#ifdef __USE_MISC
|
||||
# include <bits/types/time_t.h>
|
||||
# include <asm/socket.h>
|
||||
#else
|
||||
# define SO_DEBUG 1
|
||||
# include <bits/socket-constants.h>
|
||||
#endif
|
||||
|
||||
/* Structure used to manipulate the SO_LINGER option. */
|
||||
|
Reference in New Issue
Block a user