Alignment issue can increase the reclen limit.
Make sure Linux 64-bit readdir_r also accounts for 64-bit alignment
in getdents.
+2010-12-19 Ulrich Drepper <drepper@gmail.com>
+
+ * sysdeps/unix/readdir_r.c (__READDIR_R): Compute reclen more accurate.
+ * sysdeps/unix/sysv/linux/wordsize-64/readdir_r.c: Define
+ GETDENTS_64BIT_ALIGNED.
+
2010-12-14 Ulrich Drepper <dreper@gmail.com>
* sysdeps/i386/i686/multiarch/strcmp.S: Undo accident checkin.
#ifdef GETDENTS_64BIT_ALIGNED
/* The d_reclen value might include padding which is not part of
the DIRENT_TYPE data structure. */
- reclen = MIN (reclen, sizeof (DIRENT_TYPE));
+ reclen = MIN (reclen,
+ offsetof (DIRENT_TYPE, d_name) + sizeof (dp->d_name));
#endif
*result = memcpy (entry, dp, reclen);
#ifdef GETDENTS_64BIT_ALIGNED
#define readdir64_r __no_readdir64_r_decl
+#define GETDENTS_64BIT_ALIGNED 1
#include <sysdeps/unix/readdir_r.c>
#undef readdir64_r
weak_alias (__readdir_r, readdir64_r)