This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix network headers stdint.h namespace (bug 21455)


On 03/05/2017 14:58, Joseph Myers wrote:
> conform/ namespace tests of arpa/inet.h, netdb.h and netinet/in.h fail
> for UNIX98 and XPG42 because of inclusion of stdint.h, which defines
> macros not permitted in those headers for those standards.  UNIX98
> allows them to include inttypes.h, but (predating C99) has restricted
> inttypes.h contents (not yet tested in the conform/ tests) not
> including those macros; XPG4.2 has no such permission and no
> inttypes.h / stdint.h at all.
> 
> This patch rearranges the headers to avoid this issue.  intN_t
> definitions move to bits/stdint-intn.h, and uintN_t definitions to
> bits/stdint-uintn.h.  (These are not bits/types/ headers because they
> each define four types.  They are separate rather than just a single
> header because sys/types.h defines intN_t but u_intN_t rather than
> uintN_t - and while sys/types.h could define uintN_t because of the
> POSIX reservation of *_t, existing practice there is largely to
> condition types on appropriate feature test macros, and indeed there
> is at least one open bug report (14553) about a type that's not
> so-conditioned, so maybe types there should actually have conditions
> added where appropriate.)  The affected network headers are then made
> to include bits/stdint-uintn.h instead of stdint.h.  This allows six
> XFAILs to be removed.

At first I though about adding a bits/types, but the explanation for
current approach is reasonable.

> 
> This doesn't do anything about inttypes.h defining more than it should
> for UNIX98, but we don't have conformtest expectations for that case
> at present (and my inclination is that a fix for that should be as
> local as possible - affecting only inttypes.h, not stdint.h, only for
> the case of __USE_UNIX98 && !__USE_ISOC99).
> 
> Tested for x86_64.
> 
> 2017-05-03  Joseph Myers  <joseph@codesourcery.com>
> 
> 	[BZ #21455]
> 	* bits/stdint-intn.h: New file.
> 	* bits/stdint-uintn.h: Likewise.
> 	* stdlib/Makefile (headers): Add bits/stdint-intn.h and
> 	bits/stdint-uintn.h.
> 	* inet/netinet/in.h: Include <bits/stdint-uintn.h> instead of
> 	<stdint.h>.
> 	* posix/sys/types.h: Include <bits/stdint-intn.h>.
> 	(__int8_t_defined): Do not define here.
> 	(int8_t): Likewise.
> 	(int16_t): Likewise.
> 	(int32_t): Likewise.
> 	(int64_t): Likewise.
> 	[__GNUC_PREREQ (2, 7)] (__intN_t): Likewise.
> 	* resolv/netdb.h: Include <bits/stdint-uintn.h> instead of
> 	<stdint.h>.
> 	* include/netdb.h [_ISOMAC]: Do not include <stdint.h>.
> 	* sysdeps/generic/stdint.h: Include <bits/stdint-intn.h> and
> 	<bits/stdint-uintn.h>.
> 	(int8_t): Do not define here.
> 	(int16_t): Likewise.
> 	(int32_t): Likewise.
> 	(int64_t): Likewise.
> 	(uint8_t): Likewise.
> 	(uint16_t): Likewise.
> 	(uint32_t): Likewise.
> 	(uint64_t): Likewise.
> 	* conform/Makefile (test-xfail-XPG42/arpa/inet.h/conform): Remove
> 	variable.
> 	(test-xfail-XPG42/netdb.h/conform): Likewise.
> 	(test-xfail-XPG42/netinet/in.h/conform): Likewise.
> 	(test-xfail-UNIX98/arpa/inet.h/conform): Likewise.
> 	(test-xfail-UNIX98/netdb.h/conform): Likewise.
> 	(test-xfail-UNIX98/netinet/in.h/conform): Likewise.

LGTM, thanks.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]