diff options
author | Zack Weinberg <zackw@panix.com> | 2016-05-10 11:07:42 -0400 |
---|---|---|
committer | Zack Weinberg <zackw@panix.com> | 2016-08-03 15:28:49 -0400 |
commit | dbab6577c6684c62bd2521c1c29dc25c3cac966f (patch) | |
tree | 99009b6d1ef5a0aa9579fb198f77c031dbb84be3 /posix | |
parent | 63eb8df85a17f7f966d4daa4cf44c8e956636a86 (diff) | |
download | glibc-dbab6577c6684c62bd2521c1c29dc25c3cac966f.tar.gz |
Deprecate inclusion of <sys/sysmacros.h> by <sys/types.h>
The macros defined by <sys/sysmacros.h> are not part of POSIX nor XSI, and
their names frequently collide with user code; see for instance glibc bug
19239 and Red Hat bug 130601. <stdlib.h> includes <sys/types.h> under
_GNU_SOURCE, and C++ code presently cannot avoid being compiled under
_GNU_SOURCE, exacerbating the problem.
* NEWS: Inclusion of <sys/sysmacros.h> by <sys/types.h> is deprecated.
* misc/sys/sysmacros.h: If __SYSMACROS_DEPRECATED_INCLUSION is defined,
define major, minor, and makedev to issue deprecation warnings on use.
If __SYSMACROS_DEPRECATED_INCLUSION is *not* defined, suppress
previously-activated deprecation warnings for these macros and prevent
subsequent inclusions of this header from having any effect.
* posix/sys/types.h: Define __SYSMACROS_DEPRECATED_INCLUSION before
including <sys/sysmacros.h>, and undefine it again afterward.
Diffstat (limited to 'posix')
-rw-r--r-- | posix/sys/types.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/posix/sys/types.h b/posix/sys/types.h index a7285671bf..83dadcdd05 100644 --- a/posix/sys/types.h +++ b/posix/sys/types.h @@ -218,8 +218,14 @@ typedef int register_t __attribute__ ((__mode__ (__word__))); /* It also defines `fd_set' and the FD_* macros for `select'. */ # include <sys/select.h> -/* BSD defines these symbols, so we follow. */ +/* BSD defines `major', `minor', and `makedev' in this header. + However, these symbols are likely to collide with user code, so we are + going to stop defining them here in an upcoming release. Code that needs + these macros should include <sys/sysmacros.h> directly. Code that does + not need these macros should #undef them after including this header. */ +# define __SYSMACROS_DEPRECATED_INCLUSION # include <sys/sysmacros.h> +# undef __SYSMACROS_DEPRECATED_INCLUSION #endif /* Use misc. */ |