From 2b69c54bbbc85993cb2456ecb60a40adb574ccda Mon Sep 17 00:00:00 2001 From: Herbert Valerio Riedel Date: Sat, 12 Oct 2013 13:24:45 +0200 Subject: 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 --- System/Posix/Env.hsc | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'System/Posix/Env.hsc') diff --git a/System/Posix/Env.hsc b/System/Posix/Env.hsc index c53929f..fbe5c79 100644 --- a/System/Posix/Env.hsc +++ b/System/Posix/Env.hsc @@ -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 -- cgit v1.2.3