module System.File.Posix 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 )
openFile :: PosixPath -> IOMode -> IO Handle
openFile :: PosixPath -> IOMode -> IO Handle
openFile PosixPath
fp IOMode
iomode = Fd -> IO Handle
fdToHandle forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< case IOMode
iomode of
IOMode
ReadMode -> OpenMode -> OpenFileFlags -> IO Fd
open OpenMode
ReadOnly OpenFileFlags
df
IOMode
WriteMode -> OpenMode -> OpenFileFlags -> IO Fd
open OpenMode
WriteOnly OpenFileFlags
df { trunc :: Bool
trunc = Bool
True, creat :: Maybe FileMode
creat = forall a. a -> Maybe a
Just FileMode
0o666 }
IOMode
AppendMode -> OpenMode -> OpenFileFlags -> IO Fd
open OpenMode
WriteOnly OpenFileFlags
df { append :: Bool
append = Bool
True, creat :: Maybe FileMode
creat = forall a. a -> Maybe a
Just FileMode
0o666 }
IOMode
ReadWriteMode -> OpenMode -> OpenFileFlags -> IO Fd
open OpenMode
ReadWrite OpenFileFlags
df { creat :: Maybe FileMode
creat = forall a. a -> Maybe a
Just FileMode
0o666 }
where
open :: OpenMode -> OpenFileFlags -> IO Fd
open = PosixPath -> OpenMode -> OpenFileFlags -> IO Fd
openFd PosixPath
fp
df :: OpenFileFlags
df = OpenFileFlags
defaultFileFlags { noctty :: Bool
noctty = Bool
True, nonBlock :: Bool
nonBlock = Bool
True }
openExistingFile :: PosixPath -> IOMode -> IO Handle
openExistingFile :: PosixPath -> IOMode -> IO Handle
openExistingFile PosixPath
fp IOMode
iomode = Fd -> IO Handle
fdToHandle forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< case IOMode
iomode of
IOMode
ReadMode -> OpenMode -> OpenFileFlags -> IO Fd
open OpenMode
ReadOnly OpenFileFlags
df
IOMode
WriteMode -> OpenMode -> OpenFileFlags -> IO Fd
open OpenMode
WriteOnly OpenFileFlags
df { trunc :: Bool
trunc = Bool
True }
IOMode
AppendMode -> OpenMode -> OpenFileFlags -> IO Fd
open OpenMode
WriteOnly OpenFileFlags
df { append :: Bool
append = Bool
True }
IOMode
ReadWriteMode -> OpenMode -> OpenFileFlags -> IO Fd
open OpenMode
ReadWrite OpenFileFlags
df
where
open :: OpenMode -> OpenFileFlags -> IO Fd
open = PosixPath -> OpenMode -> OpenFileFlags -> IO Fd
openFd PosixPath
fp
df :: OpenFileFlags
df = OpenFileFlags
defaultFileFlags { noctty :: Bool
noctty = Bool
True, nonBlock :: Bool
nonBlock = Bool
True, creat :: Maybe FileMode
creat = forall a. Maybe a
Nothing }