summaryrefslogtreecommitdiff
path: root/Utility/Env.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <id@joeyh.name>2013-05-11 15:03:00 -0500
committerGravatar Joey Hess <id@joeyh.name>2013-05-11 15:03:00 -0500
commitd0fa82fb721cdc85438287e29a94cb796b7bc464 (patch)
tree26a2486b8e715b5937ce41679eafd42c02f2310a /Utility/Env.hs
parent679eaf6077375c5d59501d12c79e0891cbdd904f (diff)
git-annex now builds on Windows (doesn't work)
Diffstat (limited to 'Utility/Env.hs')
-rwxr-xr-xUtility/Env.hs39
1 files changed, 39 insertions, 0 deletions
diff --git a/Utility/Env.hs b/Utility/Env.hs
new file mode 100755
index 000000000..713360154
--- /dev/null
+++ b/Utility/Env.hs
@@ -0,0 +1,39 @@
+{- portable environment variables
+ -
+ - Copyright 2013 Joey Hess <joey@kitenet.net>
+ -
+ - Licensed under the GNU GPL version 3 or higher.
+ -}
+
+{-# LANGUAGE CPP #-}
+
+module Utility.Env where
+
+#ifdef __WINDOWS__
+import qualified System.Environment as E
+import Utility.Exception
+#else
+import qualified System.Posix.Environment as E
+#endif
+
+{- Posix getEnv is faster than the one in System.Environment,
+ - so use when available. -}
+getEnv :: String -> IO (Maybe String)
+#ifndef __WINDOWS__
+getEnv = E.getEnv
+#else
+getEnv = catchMaybeIO . E.getEnv
+#endif
+
+{- Returns True if it could successfully set the environment variable.
+ -
+ - There is, apparently, no way to do this in Windows. Instead,
+ - environment varuables must be provided when running a new process. -}
+setEnv :: String -> String -> IO Bool
+#ifndef __WINDOWS__
+setEnv var val = do
+ E.setEnv var val
+ return True
+#else
+setEnv _ _ = return False
+#endif