[PATCH] Fix POSIX compliance: Make blkcnt_t and blksize_t signed on alpha
Florian Weimer
fw@deneb.enyo.de
Sun Nov 23 12:25:59 GMT 2025
* Osama Abdelkader:
> POSIX requires that blkcnt_t and blksize_t are signed integer types.
> On alpha, these were incorrectly defined as unsigned types (__U32_TYPE).
> This change makes them signed (__SLONGWORD_TYPE) to match:
> - POSIX requirements
> - All other architectures in glibc
> - Similar types on alpha (off_t, clock_t, time_t)
>
> Fixes #33355
>
> Suggested-by: Collin Funk <collin.funk@gmail.com>
> Signed-off-by: Osama Abdelkader <osama.abdelkader@gmail.com>
> ---
> sysdeps/unix/sysv/linux/alpha/bits/typesizes.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h b/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
> index 8cc4491c0b..2682dfc83f 100644
> --- a/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
> +++ b/sysdeps/unix/sysv/linux/alpha/bits/typesizes.h
> @@ -38,7 +38,7 @@
> #define __PID_T_TYPE __S32_TYPE
> #define __RLIM_T_TYPE __ULONGWORD_TYPE
> #define __RLIM64_T_TYPE __U64_TYPE
> -#define __BLKCNT_T_TYPE __U32_TYPE
> +#define __BLKCNT_T_TYPE __SLONGWORD_TYPE
> #define __BLKCNT64_T_TYPE __U64_TYPE
> #define __FSBLKCNT_T_TYPE __S32_TYPE
> #define __FSBLKCNT64_T_TYPE __S64_TYPE
> @@ -54,7 +54,7 @@
> #define __KEY_T_TYPE __S32_TYPE
> #define __CLOCKID_T_TYPE __S32_TYPE
> #define __TIMER_T_TYPE void *
> -#define __BLKSIZE_T_TYPE __U32_TYPE
> +#define __BLKSIZE_T_TYPE __SLONGWORD_TYPE
> #define __FSID_T_TYPE struct { int __val[2]; }
> #define __SSIZE_T_TYPE __SWORD_TYPE
> #define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE
Isn't __SLONGWORD_TYPE 64 bit? So this is a fairly significant ABI
change.
Switching to a 32-bit signed type would halve maximum file size,
though.
More information about the Libc-alpha
mailing list