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 ...@@ -39,6 +39,12 @@ import Control.Monad
import Data.Maybe (fromMaybe) import Data.Maybe (fromMaybe)
import System.Posix.Internals 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' looks up a variable in the environment.
getEnv :: String -> IO (Maybe String) getEnv :: String -> IO (Maybe String)
...@@ -128,6 +134,11 @@ putEnv keyvalue = do s <- newFilePath keyvalue ...@@ -128,6 +134,11 @@ putEnv keyvalue = do s <- newFilePath keyvalue
-- According to SUSv2, the string passed to putenv -- According to SUSv2, the string passed to putenv
-- becomes part of the enviroment. #7342 -- becomes part of the enviroment. #7342
throwErrnoIfMinus1_ "putenv" (c_putenv s) 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" foreign import ccall unsafe "putenv"
c_putenv :: CString -> IO CInt c_putenv :: CString -> IO CInt
......
...@@ -85,11 +85,15 @@ import System.Posix.Error ...@@ -85,11 +85,15 @@ import System.Posix.Error
import System.Posix.Types import System.Posix.Types
import System.IO.Unsafe import System.IO.Unsafe
import Data.Bits import Data.Bits
import Data.Int
import Data.Time.Clock.POSIX import Data.Time.Clock.POSIX
import Data.Ratio import Data.Ratio
import System.Posix.Internals import System.Posix.Internals
import Foreign
import Foreign.C import Foreign.C
import Foreign.ForeignPtr
import Foreign.Marshal
import Foreign.Ptr
import Foreign.Storable
-- ----------------------------------------------------------------------------- -- -----------------------------------------------------------------------------
-- POSIX file modes -- POSIX file modes
......
...@@ -313,11 +313,6 @@ getProcessStatus block stopped pid = ...@@ -313,11 +313,6 @@ getProcessStatus block stopped pid =
_ -> do ps <- readWaitStatus wstatp _ -> do ps <- readWaitStatus wstatp
return (Just ps) return (Just ps)
#if __GLASGOW_HASKELL__ < 701
-- not available prior to 7.1
#define interruptible safe
#endif
-- safe/interruptible, because this call might block -- safe/interruptible, because this call might block
foreign import ccall interruptible "waitpid" foreign import ccall interruptible "waitpid"
c_waitpid :: CPid -> Ptr CInt -> CInt -> IO CPid c_waitpid :: CPid -> Ptr CInt -> CInt -> IO CPid
......
...@@ -103,8 +103,12 @@ module System.Posix.Signals ( ...@@ -103,8 +103,12 @@ module System.Posix.Signals (
-- siginterrupt -- siginterrupt
) where ) where
import Foreign import Data.Word
import Foreign.C import Foreign.C
import Foreign.ForeignPtr
import Foreign.Marshal
import Foreign.Ptr
import Foreign.Storable
import System.IO.Unsafe (unsafePerformIO) import System.IO.Unsafe (unsafePerformIO)
import System.Posix.Types import System.Posix.Types
import System.Posix.Internals 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