[PATCH] linux: mips: Fix getdents64 fallback on mips64-n32
Andreas Schwab
schwab@linux-m68k.org
Mon Nov 16 21:40:46 GMT 2020
On Nov 16 2020, Adhemerval Zanella via Libc-alpha wrote:
> diff --git a/sysdeps/unix/sysv/linux/mips/mips64/getdents64.c b/sysdeps/unix/sysv/linux/mips/mips64/getdents64.c
> index d18a5297dc..5b7597c99b 100644
> --- a/sysdeps/unix/sysv/linux/mips/mips64/getdents64.c
> +++ b/sysdeps/unix/sysv/linux/mips/mips64/getdents64.c
> @@ -91,15 +91,18 @@ __getdents64 (int fd, void *buf, size_t nbytes)
> while ((char *) kdp < (char *) skdp + r)
> {
> /* This macro is used to avoid aliasing violation. */
> -#define KDP_MEMBER(src, member) \
> - (__typeof__((struct kernel_dirent){0}.member) *) \
> - memcpy (&((__typeof__((struct kernel_dirent){0}.member)){0}), \
> - ((char *)(src) + offsetof (struct kernel_dirent, member)),\
> - sizeof ((struct kernel_dirent){0}.member))
> +#define KDP_MEMBER(member) \
> + ({ \
> + __typeof ((struct kernel_dirent){0}.member) kdp_tmp; \
> + memcpy (&kdp_tmp, \
> + ((char *)(kdp) + offsetof (struct kernel_dirent, member)), \
> + sizeof (kdp_tmp)); \
> + kdp_tmp; \
> + })
Why can't this just be kdp->member?
Andreas.
--
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510 2552 DF73 E780 A9DA AEC1
"And now for something completely different."
More information about the Libc-alpha
mailing list