Skip to content
Snippets Groups Projects
Commit 2b69c54b authored by Herbert Valerio Riedel's avatar Herbert Valerio Riedel :man_dancing:
Browse files

Make compatible again for GHC back to 7.4.1


By avoiding `import Foreign` this accomplishes backward-compatibility
w.r.t. the `unsafePerformIO` relocation w/o resorting to CPP
conditionals.

Moreover, in order to support base<4.7 this commits needs to reintroduce
a harmless backport of `newFilePath`.

Signed-off-by: Herbert Valerio Riedel's avatarHerbert Valerio Riedel <hvr@gnu.org>
parent 84ca1d2b
No related branches found
No related tags found
No related merge requests found
......@@ -39,6 +39,12 @@ import Control.Monad
import Data.Maybe (fromMaybe)
import System.Posix.Internals
#if !MIN_VERSION_base(4,7,0)
-- needed for backported local 'newFilePath' binding in 'putEnv'
import GHC.IO.Encoding (getFileSystemEncoding)
import qualified GHC.Foreign as GHC (newCString)
#endif
-- |'getEnv' looks up a variable in the environment.
getEnv :: String -> IO (Maybe String)
......@@ -128,6 +134,11 @@ putEnv keyvalue = do s <- newFilePath keyvalue
-- According to SUSv2, the string passed to putenv
-- becomes part of the enviroment. #7342
throwErrnoIfMinus1_ "putenv" (c_putenv s)
#if !MIN_VERSION_base(4,7,0)
where
newFilePath :: FilePath -> IO CString
newFilePath fp = getFileSystemEncoding >>= \enc -> GHC.newCString enc fp
#endif
foreign import ccall unsafe "putenv"
c_putenv :: CString -> IO CInt
......
......@@ -85,11 +85,15 @@ import System.Posix.Error
import System.Posix.Types
import System.IO.Unsafe
import Data.Bits
import Data.Int
import Data.Time.Clock.POSIX
import Data.Ratio
import System.Posix.Internals
import Foreign
import Foreign.C
import Foreign.ForeignPtr
import Foreign.Marshal
import Foreign.Ptr
import Foreign.Storable
-- -----------------------------------------------------------------------------
-- POSIX file modes
......
......@@ -313,11 +313,6 @@ getProcessStatus block stopped pid =
_ -> do ps <- readWaitStatus wstatp
return (Just ps)
#if __GLASGOW_HASKELL__ < 701
-- not available prior to 7.1
#define interruptible safe
#endif
-- safe/interruptible, because this call might block
foreign import ccall interruptible "waitpid"
c_waitpid :: CPid -> Ptr CInt -> CInt -> IO CPid
......
......@@ -103,8 +103,12 @@ module System.Posix.Signals (
-- siginterrupt
) where
import Foreign
import Data.Word
import Foreign.C
import Foreign.ForeignPtr
import Foreign.Marshal
import Foreign.Ptr
import Foreign.Storable
import System.IO.Unsafe (unsafePerformIO)
import System.Posix.Types
import System.Posix.Internals
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment