{-# OPTIONS -w #-} {- Workaround.hs This file was created automatically by configure. We disable warnings to avoid issues with duplicate imports. -} module Workaround( openFd, installHandler, raiseSignal, Handler(..), Signal, sigINT, sigHUP, sigABRT, sigALRM, sigTERM, sigPIPE, getCurrentDirectory, createLink, createDirectoryIfMissing, renameFile, bracketOnError, fileMode, getFileStatus, setFileMode, setExecutable, ) where import qualified GHC.Handle ( fdToHandle' ) import System.IO ( Handle, IOMode ) import System.Posix.Internals ( FDType ) import System.Posix.Signals(installHandler, raiseSignal, Handler(..), Signal, sigINT, sigHUP, sigABRT, sigALRM, sigTERM, sigPIPE,) import System.Directory(getCurrentDirectory) import System.Posix.Files( createLink ) import System.Directory(createDirectoryIfMissing) import System.Directory ( renameFile ) import Control.Exception( bracketOnError ) import System.Posix.Files(fileMode,getFileStatus,setFileMode) import System.Posix.Files (fileMode,getFileStatus, setFileMode, nullFileMode, setFileCreationMask, ownerReadMode, ownerWriteMode, ownerExecuteMode, groupReadMode, groupWriteMode, groupExecuteMode, otherReadMode, otherWriteMode, otherExecuteMode) import Data.Bits ( (.&.), (.|.), complement ) setExecutable :: FilePath -> Bool -> IO () setExecutable f ex = do st <- getFileStatus f umask <- setFileCreationMask 0 setFileCreationMask umask let rw = fileMode st .&. (ownerReadMode .|. ownerWriteMode .|. groupReadMode .|. groupWriteMode .|. otherReadMode .|. otherWriteMode) total = if ex then rw .|. ((ownerExecuteMode .|. groupExecuteMode .|. otherExecuteMode) .&. complement umask) else rw setFileMode f total {- Work around renaming of GHC.Handle.openFd and change in its API. -} openFd :: Int -> Maybe FDType -> FilePath -> IOMode -> Bool -> Bool -> IO Handle openFd fd x y z a b = GHC.Handle.fdToHandle' (fromIntegral fd) x b y z a