[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