This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH v2 1/5] mips: Do not malloc on getdents64 fallback
* Adhemerval Zanella:
>>> + memcpy (DP_MEMBER (dp, struct dirent64, d_reclen), &new_reclen,
>>> + sizeof ((struct dirent64){0}.d_reclen));
>>
>> That looks wrong. DP_MEMBER (dp, struct dirent64, d_reclen) is a
>> temporary object, so the outer memcpy is dead.
>
> Sigh, indeed. I changed to:
>
> memcpy (((char *)(dp) + offsetof (struct dirent64, d_reclen)),
> &new_reclen, sizeof ((struct dirent64){0}.d_reclen));
sizeof ((struct dirent64){0}.d_reclen) could just be
sizeof (new_reclen). After all, this only works if they are the same.
I guess -fno-strict-aliasing looks more attractive now. 8-/
You probably should write ((char *) dp) instead of (char *)(dp) if you
want to make the operator precedence explicit, or at least drop the
parentheses around dp. (I think the cast binds tighter than the +,
but I can't really remember. I tend to write the paranetheses.)