{-# LINE 1 "libraries/base/System/Environment/Blank.hsc" #-}
{-# LANGUAGE Safe #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE CApiFFI #-}
module System.Environment.Blank
(
module System.Environment,
getEnv,
getEnvDefault,
setEnv,
unsetEnv,
) where
import Foreign.C
{-# LINE 48 "libraries/base/System/Environment/Blank.hsc" #-}
import System.Posix.Internals
{-# LINE 50 "libraries/base/System/Environment/Blank.hsc" #-}
import GHC.IO.Exception
import System.IO.Error
import Control.Exception.Base
import Data.Maybe
import System.Environment
(
getArgs,
getProgName,
getExecutablePath,
withArgs,
withProgName,
getEnvironment
)
{-# LINE 65 "libraries/base/System/Environment/Blank.hsc" #-}
import qualified System.Environment as Environment
{-# LINE 67 "libraries/base/System/Environment/Blank.hsc" #-}
{-# LINE 79 "libraries/base/System/Environment/Blank.hsc" #-}
throwInvalidArgument :: String -> IO a
throwInvalidArgument :: forall a. String -> IO a
throwInvalidArgument String
from =
forall e a. Exception e => e -> IO a
throwIO (IOErrorType -> String -> Maybe Handle -> Maybe String -> IOError
mkIOError IOErrorType
InvalidArgument String
from forall a. Maybe a
Nothing forall a. Maybe a
Nothing)
getEnv :: String -> IO (Maybe String)
{-# LINE 91 "libraries/base/System/Environment/Blank.hsc" #-}
getEnv :: String -> IO (Maybe String)
getEnv = String -> IO (Maybe String)
Environment.lookupEnv
{-# LINE 93 "libraries/base/System/Environment/Blank.hsc" #-}
getEnvDefault ::
String ->
String ->
IO String
getEnvDefault :: String -> String -> IO String
getEnvDefault String
name String
fallback = forall a. a -> Maybe a -> a
fromMaybe String
fallback forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> IO (Maybe String)
getEnv String
name
setEnv ::
String ->
String ->
Bool ->
IO ()
setEnv :: String -> String -> Bool -> IO ()
setEnv String
key_ String
value_ Bool
overwrite
| forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
key = forall a. String -> IO a
throwInvalidArgument String
"setEnv"
| Char
'=' forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`elem` String
key = forall a. String -> IO a
throwInvalidArgument String
"setEnv"
| Bool
otherwise =
if Bool
overwrite
then String -> String -> IO ()
setEnv_ String
key String
value
else do
Maybe String
env_var <- String -> IO (Maybe String)
getEnv String
key
case Maybe String
env_var of
Just String
_ -> forall (m :: * -> *) a. Monad m => a -> m a
return ()
Maybe String
Nothing -> String -> String -> IO ()
setEnv_ String
key String
value
where
key :: String
key = forall a. (a -> Bool) -> [a] -> [a]
takeWhile (forall a. Eq a => a -> a -> Bool
/= Char
'\NUL') String
key_
value :: String
value = forall a. (a -> Bool) -> [a] -> [a]
takeWhile (forall a. Eq a => a -> a -> Bool
/= Char
'\NUL') String
value_
setEnv_ :: String -> String -> IO ()
{-# LINE 133 "libraries/base/System/Environment/Blank.hsc" #-}
setEnv_ :: String -> String -> IO ()
setEnv_ String
key String
value =
forall a. String -> (CString -> IO a) -> IO a
withFilePath String
key forall a b. (a -> b) -> a -> b
$ \ CString
keyP ->
forall a. String -> (CString -> IO a) -> IO a
withFilePath String
value forall a b. (a -> b) -> a -> b
$ \ CString
valueP ->
forall a. (Eq a, Num a) => String -> IO a -> IO ()
throwErrnoIfMinus1_ String
"setenv" forall a b. (a -> b) -> a -> b
$
CString -> CString -> CInt -> IO CInt
c_setenv CString
keyP CString
valueP (forall a b. (Integral a, Num b) => a -> b
fromIntegral (forall a. Enum a => a -> Int
fromEnum Bool
True))
foreign import ccall unsafe "setenv"
c_setenv :: CString -> CString -> CInt -> IO CInt
{-# LINE 142 "libraries/base/System/Environment/Blank.hsc" #-}
unsetEnv :: String -> IO ()
{-# LINE 163 "libraries/base/System/Environment/Blank.hsc" #-}
unsetEnv :: String -> IO ()
{-# LINE 164 "libraries/base/System/Environment/Blank.hsc" #-}
unsetEnv name = withFilePath name $ \ s ->
throwErrnoIfMinus1_ "unsetenv" (c_unsetenv s)
foreign import capi unsafe "HsBase.h unsetenv"
c_unsetenv :: CString -> IO CInt
{-# LINE 177 "libraries/base/System/Environment/Blank.hsc" #-}
{-# LINE 194 "libraries/base/System/Environment/Blank.hsc" #-}