On OS/2 kLIBC, d_name is not the last field of struct dirent. So
copying struct dirent according to the size calculated based on d_name
blows the fields after d_name up.
The correct way is to allocate the whole size of struct dirent.
* lib/scandir.c (_D_ALLOC_NAMLEN): Consider the fields after d_name on
OS/2 kLIBC.
+2016-12-01 KO Myung-Hun <komh78@gmail.com>
+
+ scandir: Fix _D_ALLOC_NAMLEN() on OS/2 kLIBC
+ * lib/scandir.c (_D_ALLOC_NAMLEN): Consider the fields after d_name on
+ OS/2 kLIBC.
+
2016-12-01 KO Myung-Hun <komh78@gmail.com>
alphasort, scandir: Port to OS/2 kLIBC
# define _D_EXACT_NAMLEN(d) strlen ((d)->d_name)
#endif
#ifndef _D_ALLOC_NAMLEN
-# define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1)
+# ifndef __KLIBC__
+# define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1)
+# else
+/* On OS/2 kLIBC, d_name is not the last field of struct dirent. See
+ <http://trac.netlabs.org/libc/browser/branches/libc-0.6/src/emx/include/sys/dirent.h#L68>. */
+# include <stddef.h>
+# define _D_ALLOC_NAMLEN(d) (sizeof (struct dirent) - \
+ offsetof (struct dirent, d_name))
+# endif
#endif
#if _LIBC