module System.Posix.Directory.Foreign where
import Data.Bits
import Data.List (foldl')
import Foreign.C.Types
newtype DirType = DirType Int deriving (Eq, Show)
newtype Flags = Flags { unFlags :: Int } deriving (Eq, Show)
dtBlk :: DirType
dtBlk = DirType 6
dtChr :: DirType
dtChr = DirType 2
dtDir :: DirType
dtDir = DirType 4
dtFifo :: DirType
dtFifo = DirType 1
dtLnk :: DirType
dtLnk = DirType 10
dtReg :: DirType
dtReg = DirType 8
dtSock :: DirType
dtSock = DirType 12
dtUnknown :: DirType
dtUnknown = DirType 0
oAppend :: Flags
oAppend = Flags 1024
oAsync :: Flags
oAsync = Flags 8192
oCloexec :: Flags
oCloexec = Flags 524288
oCreat :: Flags
oCreat = Flags 64
oDirectory :: Flags
oDirectory = Flags 65536
oExcl :: Flags
oExcl = Flags 128
oNoctty :: Flags
oNoctty = Flags 256
oNofollow :: Flags
oNofollow = Flags 131072
oNonblock :: Flags
oNonblock = Flags 2048
oRdonly :: Flags
oRdonly = Flags 0
oSync :: Flags
oSync = Flags 1052672
oTrunc :: Flags
oTrunc = Flags 512
pathMax :: Int
pathMax = 4096
unionFlags :: [Flags] -> CInt
unionFlags = fromIntegral . foldl' ((. unFlags) . (.|.)) 0