{-# LANGUAGE CPP #-}
{-# LANGUAGE Safe #-}
module System.IO.StatCompat where
import safe System.Posix.Consts
( blockSpecialMode,
characterSpecialMode,
namedPipeMode,
regularFileMode,
directoryMode,
fileTypeModes,
socketMode,
symbolicLinkMode )
import safe System.Posix.Types
( DeviceID,
EpochTime,
FileID,
FileMode,
FileOffset )
#if !(defined(mingw32_HOST_OS) || defined(mingw32_TARGET_OS) || defined(__MINGW32__))
import safe System.Posix.Types ( LinkCount, UserID, GroupID )
import safe System.Posix.Files ( intersectFileModes )
#else
import safe Data.Bits ( (.&.) )
type LinkCount = Int
type UserID = Int
type GroupID = Int
intersectFileModes :: FileMode -> FileMode -> FileMode
intersectFileModes m1 m2 = m1 .&. m2
#endif
data FileStatusCompat =
FileStatusCompat {FileStatusCompat -> DeviceID
deviceID :: DeviceID,
FileStatusCompat -> FileID
fileID :: FileID,
FileStatusCompat -> CMode
fileMode :: FileMode,
FileStatusCompat -> LinkCount
linkCount :: LinkCount,
FileStatusCompat -> UserID
fileOwner :: UserID,
FileStatusCompat -> GroupID
fileGroup :: GroupID,
FileStatusCompat -> DeviceID
specialDeviceID :: DeviceID,
FileStatusCompat -> FileOffset
fileSize :: FileOffset,
FileStatusCompat -> EpochTime
accessTime :: EpochTime,
FileStatusCompat -> EpochTime
modificationTime :: EpochTime,
FileStatusCompat -> EpochTime
statusChangeTime :: EpochTime
}
sc_helper :: FileMode -> FileStatusCompat -> Bool
sc_helper :: CMode -> FileStatusCompat -> Bool
sc_helper CMode
comp FileStatusCompat
stat =
(FileStatusCompat -> CMode
fileMode FileStatusCompat
stat CMode -> CMode -> CMode
`intersectFileModes` CMode
fileTypeModes) CMode -> CMode -> Bool
forall a. Eq a => a -> a -> Bool
== CMode
comp
isBlockDevice,isCharacterDevice,isNamedPipe,isRegularFile,isDirectory,isSymbolicLink,isSocket :: FileStatusCompat -> Bool
isBlockDevice :: FileStatusCompat -> Bool
isBlockDevice = CMode -> FileStatusCompat -> Bool
sc_helper CMode
blockSpecialMode
isCharacterDevice :: FileStatusCompat -> Bool
isCharacterDevice = CMode -> FileStatusCompat -> Bool
sc_helper CMode
characterSpecialMode
isNamedPipe :: FileStatusCompat -> Bool
isNamedPipe = CMode -> FileStatusCompat -> Bool
sc_helper CMode
namedPipeMode
isRegularFile :: FileStatusCompat -> Bool
isRegularFile = CMode -> FileStatusCompat -> Bool
sc_helper CMode
regularFileMode
isDirectory :: FileStatusCompat -> Bool
isDirectory = CMode -> FileStatusCompat -> Bool
sc_helper CMode
directoryMode
isSymbolicLink :: FileStatusCompat -> Bool
isSymbolicLink = CMode -> FileStatusCompat -> Bool
sc_helper CMode
symbolicLinkMode
isSocket :: FileStatusCompat -> Bool
isSocket = CMode -> FileStatusCompat -> Bool
sc_helper CMode
socketMode