From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 108507 invoked by alias); 8 Jan 2020 19:19:01 -0000 Mailing-List: contact glibc-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: , Sender: glibc-cvs-owner@sourceware.org List-Subscribe: Received: (qmail 108353 invoked by uid 9014); 8 Jan 2020 19:19:01 -0000 Date: Wed, 08 Jan 2020 19:19:00 -0000 Message-ID: <20200108191901.108347.qmail@sourceware.org> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Zack Weinberg To: glibc-cvs@sourceware.org Subject: =?utf-8?q?=5Bglibc/zack/no-nested-includes=5D_sys/types=2Eh=3A_Don?= =?utf-8?q?=E2=80=99t_define_u=5FintN=5Ft_or_register=5Ft_unless_=5F=5FUSE?= =?utf-8?b?X01JU0Mu?= X-Act-Checkin: glibc X-Git-Author: Zack Weinberg X-Git-Refname: refs/heads/zack/no-nested-includes X-Git-Oldrev: 9d8ecbbf117a1f3ddeb6b80a4e242d43a1f6d390 X-Git-Newrev: 40782c2685760fc7fe9d82738e3091bfa5216c1c X-SW-Source: 2020-q1/txt/msg00081.txt https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=40782c2685760fc7fe9d82738e3091bfa5216c1c commit 40782c2685760fc7fe9d82738e3091bfa5216c1c Author: Zack Weinberg Date: Mon Feb 18 21:00:34 2019 -0500 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). Diff: --- NEWS | 8 ++++++++ posix/sys/types.h | 16 ++++++++-------- scripts/check-obsolete-constructs.py | 1 + 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 and 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 in strict conformance modes. + These types were historically provided by 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 . 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 +/* 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 + #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 - -/* 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 is expected to define BYTE_ORDER. */ # include 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)