[project @ 2001-08-04 06:19:54 by ken]
[ghc-hetmet.git] / ghc / lib / std / Directory.hsc
index 36e4d18..1ce5844 100644 (file)
@@ -1,5 +1,5 @@
 -- -----------------------------------------------------------------------------
--- $Id: Directory.hsc,v 1.5 2001/02/13 15:23:33 rrt Exp $
+-- $Id: Directory.hsc,v 1.13 2001/07/13 11:48:52 rrt Exp $
 --
 -- (c) The University of Glasgow, 1994-2000
 --
@@ -54,17 +54,18 @@ import Prelude              -- Just to get it in the dependencies
 
 import Time             ( ClockTime(..) )
 
+import PrelPosix
 import PrelStorable
 import PrelCString
 import PrelMarshalAlloc
 import PrelCTypesISO
 import PrelCTypes
-import PrelPosixTypes
 import PrelCError
 import PrelPtr
 import PrelIOBase
 import PrelBase
 
+#include "config.h"
 #include <sys/stat.h>
 #include <dirent.h>
 #include <limits.h>
@@ -348,13 +349,23 @@ getDirectoryContents path = do
       resetErrno
       p <- readdir dir
       if (p /= nullPtr)
-        then do entry   <- peekCString ((#ptr struct dirent,d_name) p)
+        then do
+#ifndef mingw32_TARGET_OS
+                 entry <- peekCString ((#ptr struct dirent,d_name) p)
+#else
+                 entryp <- (#peek struct dirent,d_name) p
+                 entry <- peekCString entryp -- on mingwin it's a char *, not a char []
+#endif
                 entries <- loop dir
                 return (entry:entries)
         else do errno <- getErrno
                 if (errno == eINTR) then loop dir else do
                 throwErrnoIfMinus1_ "getDirectoryContents" $ closedir dir
+#ifndef mingw32_TARGET_OS
                 if (errno == eOK)
+#else
+                if (errno == eNOENT) -- mingwin (20001111) cunningly sets errno to ENOENT when it runs out of files
+#endif
                    then return []
                    else throwErrno "getDirectoryContents"
 
@@ -543,4 +554,3 @@ foreign import ccall unsafe closedir :: Ptr CDir -> IO CInt
 foreign import ccall unsafe stat     :: UCString -> Ptr CStat -> IO CInt
 
 type CDirent = ()
-type CStat   = ()