[PATCH v2] nss: remove undefined behavior and optimize getaddrinfo
Maciej W. Rozycki
macro@orcam.me.uk
Mon May 5 02:06:36 GMT 2025
On Mon, 28 Apr 2025, Collin Funk wrote:
> diff --git a/nss/getaddrinfo.c b/nss/getaddrinfo.c
> index efe6ad30d5..1e38a8d87e 100644
> --- a/nss/getaddrinfo.c
> +++ b/nss/getaddrinfo.c
> @@ -1658,7 +1645,7 @@ rfc3484_sort (const void *p1, const void *p2, void *arg)
> in_addr_t netmask1 = 0xffffffffu << (32 - a1->prefixlen);
>
> if ((in1_src_addr & netmask1) == (in1_dst_addr & netmask1))
> - bit1 = fls (in1_dst_addr ^ in1_src_addr);
> + bit1 = stdc_leading_zeros (in1_dst_addr ^ in1_src_addr);
This uses spaces rather than tabs for indentation, please fix.
> @@ -1669,7 +1656,7 @@ rfc3484_sort (const void *p1, const void *p2, void *arg)
> in_addr_t netmask2 = 0xffffffffu << (32 - a2->prefixlen);
>
> if ((in2_src_addr & netmask2) == (in2_dst_addr & netmask2))
> - bit2 = fls (in2_dst_addr ^ in2_src_addr);
> + bit2 = stdc_leading_zeros (in2_dst_addr ^ in2_src_addr);
Likewise.
> @@ -1696,10 +1683,12 @@ rfc3484_sort (const void *p1, const void *p2, void *arg)
>
> if (i < 4)
> {
> - bit1 = fls (ntohl (in1_dst->sin6_addr.s6_addr32[i]
> - ^ in1_src->sin6_addr.s6_addr32[i]));
> - bit2 = fls (ntohl (in2_dst->sin6_addr.s6_addr32[i]
> - ^ in2_src->sin6_addr.s6_addr32[i]));
> + uint32_t set_bits1 = (in1_dst->sin6_addr.s6_addr32[i]
> + ^ in1_src->sin6_addr.s6_addr32[i]);
> + uint32_t set_bits2 = (in2_dst->sin6_addr.s6_addr32[i]
> + ^ in2_src->sin6_addr.s6_addr32[i]);
> + bit1 = stdc_leading_zeros (ntohl (set_bits1));
> + bit2 = stdc_leading_zeros (ntohl (set_bits2));
Likewise.
Maciej
More information about the Libc-alpha
mailing list