aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2019-02-18 21:00:34 -0500
committerZack Weinberg <zackw@panix.com>2020-01-08 12:52:50 -0500
commit40782c2685760fc7fe9d82738e3091bfa5216c1c (patch)
treecae674713f38b587349fe832822076bda58afe71
parent9d8ecbbf117a1f3ddeb6b80a4e242d43a1f6d390 (diff)
downloadglibc-40782c2685760fc7fe9d82738e3091bfa5216c1c.zip
glibc-40782c2685760fc7fe9d82738e3091bfa5216c1c.tar.gz
glibc-40782c2685760fc7fe9d82738e3091bfa5216c1c.tar.bz2
sys/types.h: Don’t define u_intN_t or register_t unless __USE_MISC.
sys/types.h unconditionally defines u_int8_t, u_int16_t, u_int32_t, u_int64_t, and register_t. These are not part of any standard. The u_intXX_t types are superseded by C99’s uintXX_t types (defined in stdint.h). I’m not aware of a standardized exact equivalent of register_t, but also I’ve never seen anyone use it for anything. I could be persuaded to leave that one alone. sys/types.h also unconditionally defines int8_t, int16_t, int32_t, and int64_t, which are the same as the C99 exact-width signed types in stdint.h. POSIX doesn’t require these to appear in sys/types.h, so in principle they ought to be brought under __USE_MISC also. But, when I tried that it broke about two dozen files just in our own source tree, and POSIX doesn’t *forbid* sys/types.h to define these types, so I think we should leave them alone. * posix/sys/types.h (u_int8_t, u_int16_t, u_int32_t, u_int64_t) (register_t): Move under #ifdef __USE_MISC. Consolidate adjacent #ifdef __USE_MISC blocks. * scripts/check_obsolete_constructs.py: Add register_t to the set of obsolete typedefs that our headers should not use (but sys/types.h may still define).
-rw-r--r--NEWS8
-rw-r--r--posix/sys/types.h16
-rwxr-xr-xscripts/check-obsolete-constructs.py1
3 files changed, 17 insertions, 8 deletions
diff --git a/NEWS b/NEWS
index b85989e..599db8f 100644
--- a/NEWS
+++ b/NEWS
@@ -187,6 +187,14 @@ Deprecated and removed features, and other changes affecting compatibility:
* The obsolete and never-implemented XSI STREAMS header files <stropts.h>
and <sys/stropts.h> have been removed.
+* The typedefs u_int8_t, u_int16_t, u_int32_t, u_int64_t, and register_t
+ are no longer defined by <sys/types.h> in strict conformance modes.
+ These types were historically provided by <sys/types.h> on BSD systems,
+ but are not part of the POSIX specification for that header. Applications
+ requiring fixed-width unsigned integer types should use the similarly
+ named uint8_t, uint16_t, etc. from <stdint.h>. There is no standardized
+ replacement for register_t.
+
* Support for the "inet6" option in /etc/resolv.conf and the RES_USE_INET6
resolver flag (deprecated in glibc 2.25) have been removed.
diff --git a/posix/sys/types.h b/posix/sys/types.h
index 1838bdd..65a8cfb 100644
--- a/posix/sys/types.h
+++ b/posix/sys/types.h
@@ -143,18 +143,20 @@ typedef __suseconds_t suseconds_t;
#define __need_size_t
#include <stddef.h>
+/* POSIX does not require intN_t to be defined in this header, so
+ technically this ought to be under __USE_MISC, but it doesn't
+ forbid them to be defined here either, and much existing code
+ expects them to be defined here. */
+#include <bits/stdint-intn.h>
+
#ifdef __USE_MISC
/* Old compatibility names for C types. */
typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
-#endif
-
-/* These size-specific names are used by some of the inet code. */
-#include <bits/stdint-intn.h>
-
-/* These were defined by ISO C without the first `_'. */
+/* These size-specific names are used by some of the inet code.
+ They were defined by ISO C without the first `_'. */
typedef __uint8_t u_int8_t;
typedef __uint16_t u_int16_t;
typedef __uint32_t u_int32_t;
@@ -167,8 +169,6 @@ typedef __register_t register_t;
defined. */
#define __BIT_TYPES_DEFINED__ 1
-
-#ifdef __USE_MISC
/* In BSD <sys/types.h> is expected to define BYTE_ORDER. */
# include <endian.h>
diff --git a/scripts/check-obsolete-constructs.py b/scripts/check-obsolete-constructs.py
index 5037de4..cdeacd8 100755
--- a/scripts/check-obsolete-constructs.py
+++ b/scripts/check-obsolete-constructs.py
@@ -254,6 +254,7 @@ class NoCheck(ConstructChecker):
OBSOLETE_TYPE_RE_ = re.compile(r"""\A
(__)?
( quad_t
+ | register_t
| u(?: short | int | long
| _(?: char | short | int(?:[0-9]+_t)? | long | quad_t )))
\Z""", re.VERBOSE)