-- -----------------------------------------------------------------------------
--- $Id: Directory.hsc,v 1.3 2001/01/12 17:45:30 qrczak Exp $
+-- $Id: Directory.hsc,v 1.13 2001/07/13 11:48:52 rrt Exp $
--
-- (c) The University of Glasgow, 1994-2000
--
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>
throwErrnoIfMinus1Retry_ "removeFile" (unlink s)
{-
-@renameDirectory old@ {\em new} changes the name of an existing
+@renameDirectory@ {\em old} {\em new} changes the name of an existing
directory from {\em old} to {\em new}. If the {\em new} directory
already exists, it is atomically replaced by the {\em old} directory.
If the {\em new} directory is neither the {\em old} directory nor an
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
- if (isValidErrno errno) -- EOF
- then throwErrno "getDirectoryContents"
- else return []
+#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"
{-
If the operating system has a notion of current directories,
foreign import ccall unsafe stat :: UCString -> Ptr CStat -> IO CInt
type CDirent = ()
-type CStat = ()