--getDirectoryContents :: FilePath -> IO [FilePath]
getDirectoryContents path = do
dir <- _ccall_ openDir__ path
- ptr <- _ccall_ malloc (``sizeof(struct dirent**)''::Int)
if dir == ``NULL''
then constructErrorAndFail "getDirectoryContents"
- else loop dir ptr
+ else loop dir
where
- loop :: Addr -> Addr -> IO [String]
- loop dir dirent_ptr = do
+ loop :: Addr -> IO [String]
+ loop dir = do
dirent_ptr <- _ccall_ readDir__ dir
- if dirent_ptr == ``NULL''
+ if (dirent_ptr::Addr) == ``NULL''
then do
return []
else do
-- calls to readdir() may overwrite it.
len <- _ccall_ strlen str
entry <- stToIO (unpackNBytesST str len)
- entries <- loop dir dirent_ptr
+ entries <- loop dir
return (entry:entries)
\end{code}