unix-2.8.3.0: System/Posix/Env/Internal.hsc
module System.Posix.Env.Internal where
#include "HsUnix.h"
import Foreign
import Foreign.C
getEnvironmentPrim :: IO [Ptr CChar]
getEnvironmentPrim = do
c_environ <- getCEnviron
if c_environ == nullPtr
then return []
else do
peekArray0 nullPtr c_environ
getCEnviron :: IO (Ptr CString)
#if HAVE__NSGETENVIRON
-- You should not access @char **environ@ directly on Darwin in a bundle/shared library.
-- See #2458 and http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man7/environ.7.html
getCEnviron = nsGetEnviron >>= peek
foreign import ccall unsafe "_NSGetEnviron"
nsGetEnviron :: IO (Ptr (Ptr CString))
#else
getCEnviron = _getCEnviron
-- N.B. we cannot import `environ` directly in Haskell as it may be a weak symbol
-- which requires special treatment by the compiler, which GHC is not equipped to
-- provide. See GHC #24011.
foreign import ccall unsafe "__hsunix_get_environ"
_getCEnviron :: IO (Ptr CString)
#endif