>From cd43e915922141bfc6897ac6f4cd3bfe0035bf10 Mon Sep 17 00:00:00 2001
From: KO Myung-Hun <komh@chollian.net>
Date: Fri, 14 Oct 2011 21:22:04 +0900
Subject: [PATCH 24/26] Fix vlc_readdir() for OS/2

---
 src/posix/filesystem.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/src/posix/filesystem.c b/src/posix/filesystem.c
index b33b485..eda796e 100644
--- a/src/posix/filesystem.c
+++ b/src/posix/filesystem.c
@@ -191,6 +191,7 @@ char *vlc_readdir( DIR *dir )
     char *path = NULL;
 
     long len = fpathconf (dirfd (dir), _PC_NAME_MAX);
+#if !defined(__OS2__) || !defined(__INNOTEK_LIBC__)
 #ifdef NAME_MAX
     /* POSIX says there shall we room for NAME_MAX bytes at all times */
     if (/*len == -1 ||*/ len < NAME_MAX)
@@ -201,6 +202,13 @@ char *vlc_readdir( DIR *dir )
         return NULL;
 #endif
     len += offsetof (struct dirent, d_name) + 1;
+#else /* __OS2__ && __INNOTEK_LIBC__ */
+    /* In the implementation of Innotek LIBC, aka kLIBC on OS/2,
+     * fpathconf (_PC_NAME_MAX) is broken, and d_name is not the last member
+     * of struct dirent.
+     * So just allocate as many as the size of struct dirent. */
+    len = sizeof (struct dirent);
+#endif
 
     struct dirent *buf = malloc (len);
     if (unlikely(buf == NULL))
-- 
1.7.3.2

