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