Skip to content
Snippets Groups Projects
Commit a0379db0 authored by pcapriotti's avatar pcapriotti
Browse files

Add workaround for systems without clearenv.

parent 5ee7433f
Branches
Tags
No related merge requests found
...@@ -36,7 +36,7 @@ import Foreign.C.String ...@@ -36,7 +36,7 @@ import Foreign.C.String
import Foreign.Marshal.Array import Foreign.Marshal.Array
import Foreign.Ptr import Foreign.Ptr
import Foreign.Storable import Foreign.Storable
import Control.Monad (liftM, forM_, void) import Control.Monad
import Data.Maybe (fromMaybe) import Data.Maybe (fromMaybe)
#if __GLASGOW_HASKELL__ > 700 #if __GLASGOW_HASKELL__ > 700
import System.Posix.Internals (withFilePath, peekFilePath) import System.Posix.Internals (withFilePath, peekFilePath)
...@@ -83,6 +83,7 @@ getEnvironmentPrim = do ...@@ -83,6 +83,7 @@ getEnvironmentPrim = do
mapM peekFilePath arr mapM peekFilePath arr
getCEnviron :: IO (Ptr CString) getCEnviron :: IO (Ptr CString)
#if darwin_HOST_OS #if darwin_HOST_OS
-- You should not access _environ directly on Darwin in a bundle/shared library. -- You should not access _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 -- See #2458 and http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man7/environ.7.html
...@@ -170,7 +171,15 @@ setEnv key value False = do ...@@ -170,7 +171,15 @@ setEnv key value False = do
-- |The 'clearEnv' function clears the environment of all name-value pairs. -- |The 'clearEnv' function clears the environment of all name-value pairs.
clearEnv :: IO () clearEnv :: IO ()
#if HAVE_CLEARENV
clearEnv = void c_clearenv clearEnv = void c_clearenv
foreign import ccall unsafe "clearenv" foreign import ccall unsafe "clearenv"
c_clearenv :: IO Int c_clearenv :: IO Int
#else
-- Fallback to 'environ[0] = NULL'.
clearEnv = do
c_environ <- getCEnviron
unless (c_environ == nullPtr) $
poke c_environ nullPtr
#endif
...@@ -28,7 +28,7 @@ AC_CHECK_HEADERS([termios.h time.h unistd.h utime.h]) ...@@ -28,7 +28,7 @@ AC_CHECK_HEADERS([termios.h time.h unistd.h utime.h])
AC_CHECK_FUNCS([getgrgid_r getgrnam_r getpwnam_r getpwuid_r getpwnam getpwuid]) AC_CHECK_FUNCS([getgrgid_r getgrnam_r getpwnam_r getpwuid_r getpwnam getpwuid])
AC_CHECK_FUNCS([getpwent getgrent]) AC_CHECK_FUNCS([getpwent getgrent])
AC_CHECK_FUNCS([lchown setenv sysconf unsetenv]) AC_CHECK_FUNCS([lchown setenv sysconf unsetenv clearenv])
AC_CHECK_FUNCS([nanosleep]) AC_CHECK_FUNCS([nanosleep])
AC_CHECK_FUNCS([ptsname]) AC_CHECK_FUNCS([ptsname])
AC_CHECK_FUNCS([setitimer]) AC_CHECK_FUNCS([setitimer])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment