[PATCH v3] io: Use gnulib fts implementation (BZ 22944, BZ 20331)
Collin Funk
collin.funk1@gmail.com
Fri Mar 27 04:37:18 GMT 2026
Hi Adhemerval,
Adhemerval Zanella <adhemerval.zanella@linaro.org> writes:
> diff --git a/include/stdbit.h b/include/stdbit.h
> index ebd9795f28..f1e36e6815 100644
> --- a/include/stdbit.h
> +++ b/include/stdbit.h
> @@ -1 +1,56 @@
> +#ifndef _STDBIT_H
> #include <stdlib/stdbit.h>
> +
> +#ifndef _ISOMAC
> +# include <stdint.h>
> +
> +# if __glibc_has_builtin (___builtin_stdc_rotate_right)
> +# define stdc_rotate_right(__x, __n) \
> + (___builtin_stdc_rotate_right (__x, __n))
> +# else
> +# if __WORDSIZE == 64
> +# define __ROR_UL_GENERIC __ror64
> +# else
> +# define __ROR_UL_GENERIC __ror32
> +# endif
> +# define stdc_rotate_right(__x, __n) \
> + _Generic((__x), \
> + unsigned char: __ror8, \
> + unsigned short: __ror16, \
> + unsigned int: __ror32, \
> + unsigned long: __ROR_UL_GENERIC, \
> + unsigned long long: __ror64 \
> + )(__x, __n)
> +
> +#define __ror_generic(__v, __n) \
> + ((__v >> (__n & (sizeof __v * 8 - 1))) \
> + | (__v << ((-__n) & (sizeof __v * 8 - 1))))
> +
> +static __always_inline uint8_t
> +__ror8 (uint8_t __x, unsigned int __n)
> +{
> + return __ror_generic (__x, __n);
> +}
> +
> +static __always_inline uint16_t
> +__ror16 (uint16_t __x, unsigned int __n)
> +{
> + return __ror_generic (__x, __n);
> +}
> +
> +static __always_inline unsigned int
> +__ror32 (uint32_t __x, unsigned int __n)
> +{
> + return __ror_generic (__x, __n);
> +}
> +
> +static __always_inline unsigned long
> +__ror64 (uint64_t __x, unsigned int __n)
> +{
> + return __ror_generic (__x, __n);
> +}
> +# endif
> +
> +# endif /* _ISOMAC */
> +
> +#endif /* _STDBIT_H */
I had a quick skim over the fts patch and it generally looks good. But I
would prefer adding these stdbit.h functions along with tests.
How about separating this into another patch and adding my tests from
Gnulib [1] [2]? I am the sole author of those files, and am okay with
relicensing them under the LGPLv2+. We import some stdbit.h tests
already from glibc, so maybe you could take inspiration from those [3].
WDYT?
Collin
[1] https://github.com/coreutils/gnulib/blob/master/tests/test-stdc_rotate_left.c
[2] https://github.com/coreutils/gnulib/blob/master/tests/test-stdc_rotate_right.c
[3] https://github.com/coreutils/gnulib/blob/master/tests/from-glibc/tst-stdc_count_ones.c
More information about the Libc-alpha
mailing list