file-io-0.1.0.2: posix/System/File/Platform.hs
module System.File.Platform where
import System.IO (IOMode(..), Handle)
import System.Posix.IO.PosixString
( defaultFileFlags,
fdToHandle,
openFd,
OpenFileFlags(noctty, nonBlock, creat, append, trunc),
OpenMode(ReadWrite, ReadOnly, WriteOnly) )
import System.OsPath.Posix ( PosixPath )
-- | Open a file and return the 'Handle'.
openFile :: PosixPath -> IOMode -> IO Handle
openFile fp iomode = fdToHandle =<< case iomode of
ReadMode -> open ReadOnly df
WriteMode -> open WriteOnly df { trunc = True, creat = Just 0o666 }
AppendMode -> open WriteOnly df { append = True, creat = Just 0o666 }
ReadWriteMode -> open ReadWrite df { creat = Just 0o666 }
where
open = openFd fp
df = defaultFileFlags { noctty = True, nonBlock = True }
-- | Open an existing file and return the 'Handle'.
openExistingFile :: PosixPath -> IOMode -> IO Handle
openExistingFile fp iomode = fdToHandle =<< case iomode of
ReadMode -> open ReadOnly df
WriteMode -> open WriteOnly df { trunc = True }
AppendMode -> open WriteOnly df { append = True }
ReadWriteMode -> open ReadWrite df
where
open = openFd fp
df = defaultFileFlags { noctty = True, nonBlock = True, creat = Nothing }