{-# LINE 1 "src/System/Posix/Directory/Foreign.hsc" #-}
module System.Posix.Directory.Foreign where
{-# LINE 2 "src/System/Posix/Directory/Foreign.hsc" #-}

import Data.Bits
import Data.List (foldl')
import Foreign.C.Types


{-# LINE 8 "src/System/Posix/Directory/Foreign.hsc" #-}

{-# LINE 9 "src/System/Posix/Directory/Foreign.hsc" #-}

{-# LINE 10 "src/System/Posix/Directory/Foreign.hsc" #-}

{-# LINE 11 "src/System/Posix/Directory/Foreign.hsc" #-}

{-# LINE 12 "src/System/Posix/Directory/Foreign.hsc" #-}

{-# LINE 13 "src/System/Posix/Directory/Foreign.hsc" #-}

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

{-# LINE 18 "src/System/Posix/Directory/Foreign.hsc" #-}

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

{-# LINE 20 "src/System/Posix/Directory/Foreign.hsc" #-}

pathMax :: Int
pathMax = 4096
{-# LINE 23 "src/System/Posix/Directory/Foreign.hsc" #-}

unionFlags :: [Flags] -> CInt
unionFlags = fromIntegral . foldl' ((. unFlags) . (.|.)) 0