aboutsummaryrefslogtreecommitdiffhomepage
path: root/System/Posix/Env.hsc
diff options
context:
space:
mode:
authorGravatar Herbert Valerio Riedel <hvr@gnu.org>2013-10-12 13:24:45 +0200
committerGravatar Herbert Valerio Riedel <hvr@gnu.org>2013-10-12 13:24:45 +0200
commit2b69c54bbbc85993cb2456ecb60a40adb574ccda (patch)
tree8dc41de1c014ca448220897de43366f31e79fc73 /System/Posix/Env.hsc
parent84ca1d2b4477076bc4441b7ba5a554162a272162 (diff)
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 <hvr@gnu.org>
Diffstat (limited to 'System/Posix/Env.hsc')
-rw-r--r--System/Posix/Env.hsc11
1 files changed, 11 insertions, 0 deletions
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