diff options
author | Joseph Myers <joseph@codesourcery.com> | 2017-05-04 20:36:42 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2017-05-04 20:36:42 +0000 |
commit | 176804300be88f9ceaef7d7a2304b1ed48f0f356 (patch) | |
tree | 847a78491e3ee52f405d2806284e359a10b80ae4 /stdlib | |
parent | 593bf7189a82b9b2874d41c71cb2109482a9f201 (diff) | |
download | glibc-176804300be88f9ceaef7d7a2304b1ed48f0f356.tar.gz glibc-176804300be88f9ceaef7d7a2304b1ed48f0f356.tar.xz glibc-176804300be88f9ceaef7d7a2304b1ed48f0f356.zip |
Fix network headers stdint.h namespace (bug 21455).
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. 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. [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.
Diffstat (limited to 'stdlib')
-rw-r--r-- | stdlib/Makefile | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/stdlib/Makefile b/stdlib/Makefile index 5751b5d600..4206f2566e 100644 --- a/stdlib/Makefile +++ b/stdlib/Makefile @@ -28,7 +28,8 @@ headers := stdlib.h bits/stdlib.h bits/stdlib-ldbl.h bits/stdlib-float.h \ errno.h sys/errno.h bits/errno.h \ ucontext.h sys/ucontext.h \ alloca.h fmtmsg.h \ - bits/stdlib-bsearch.h sys/random.h + bits/stdlib-bsearch.h sys/random.h bits/stdint-intn.h \ + bits/stdint-uintn.h routines := \ atof atoi atol atoll \ |