This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 3/8] sys/types.h: Don’t define u_intN_t or register_t unless __USE_MISC.
- From: Florian Weimer <fweimer at redhat dot com>
- To: Zack Weinberg <zackw at panix dot com>
- Cc: libc-alpha at sourceware dot org
- Date: Thu, 09 May 2019 10:34:01 +0200
- Subject: Re: [PATCH 3/8] sys/types.h: Don’t define u_intN_t or register_t unless __USE_MISC.
- References: <cover.1552315664.git.zackw@panix.com> <adf04a2ec1fb975659126f31ef9b547f409ccd7d.1552315664.git.zackw@panix.com>
* Zack Weinberg:
> +* 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.
The challenge with register_t is that it's long long on x32 and MIPS64
with -mabi=n32.
And ideally, it would be the return type of the syscall function (which
is long int by incorrect tradition).
> diff --git a/posix/sys/types.h b/posix/sys/types.h
> index 1bbd896ad4..7327904346 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;
I think the comment refers to the same types as the comment above the
inclusion of <bits/stdint-intn.h>. Maybe that could be made more clear
to the casual reader?
Rest of the patch looks fine to me.
Thanks,
Florian