ajhc-0.8.0.1: lib/haskell-extras/System/Directory.hs
{-# OPTIONS_JHC -fffi #-}
module System.Directory (
Permissions( Permissions, readable, writable, executable, searchable ),
createDirectory, removeDirectory, removeFile,
renameDirectory, renameFile, getDirectoryContents,
getCurrentDirectory, setCurrentDirectory,
doesFileExist, doesDirectoryExist,
getPermissions, setPermissions,
getModificationTime ) where
import Foreign
import Foreign.C
import System.Time
data Permissions = Permissions {
readable, writable,
executable, searchable :: !Bool
} deriving (Eq,Ord,Read,Show)
cPathMax :: CSize
cPathMax = 1024
getCurrentDirectory :: IO FilePath
getCurrentDirectory = allocaBytes (fromIntegral cPathMax) $ \cp -> do
cp <- throwErrnoIfNull "getCurrentDirectory" (getcwd cp cPathMax)
peekCString cp
setCurrentDirectory :: FilePath -> IO ()
setCurrentDirectory fp = throwErrnoIfMinus1_ fp $ withCString fp chdir
foreign import ccall unsafe chdir :: CString -> IO Int
foreign import ccall unsafe getcwd :: Ptr CChar -> CSize -> IO (Ptr CChar)
foreign import ccall unsafe mkdir :: CString -> Int -> IO Int
foreign import ccall unsafe rmdir :: CString -> IO Int
foreign import ccall unsafe unlink :: CString -> IO Int
foreign import ccall unsafe rename :: CString -> CString -> IO Int
createDirectory :: FilePath -> IO ()
createDirectory fp = throwErrnoIfMinus1_ fp $ withCString fp $ \cs -> mkdir cs (-1)
removeDirectory :: FilePath -> IO ()
removeDirectory fp = throwErrnoIfMinus1_ fp $ withCString fp rmdir
removeFile :: FilePath -> IO ()
removeFile fp = throwErrnoIfMinus1_ fp $ withCString fp unlink
renameDirectory :: FilePath -> FilePath -> IO ()
renameDirectory fp1 fp2 = throwErrnoIfMinus1_ "rename" $ do
withCString fp1 $ \fp1 -> do
withCString fp2 $ \fp2 -> do
rename fp1 fp2
renameFile :: FilePath -> FilePath -> IO ()
renameFile x y = renameDirectory x y
getDirectoryContents :: FilePath -> IO [FilePath]
getDirectoryContents = error "getDirectoryContents"
doesFileExist :: FilePath -> IO Bool
doesFileExist = error "doesFileExist"
doesDirectoryExist :: FilePath -> IO Bool
doesDirectoryExist = error "doesDirectoryExist"
getPermissions :: FilePath -> IO Permissions
getPermissions = error "getPermissions"
setPermissions :: FilePath -> Permissions -> IO ()
setPermissions = error "setPermissions"
getModificationTime :: FilePath -> IO ClockTime
getModificationTime = error "getModificationTime"