From 980235d194353a1ee9109303f5a12bb42f68d6c3 Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Mon, 4 Apr 2011 14:28:42 +1000 Subject: Better handling of environ on Mac OS X Shared libraries can't access environ directly, so use _NSGetEnviron() on Mac OS X Also, load modules with (RTLD_NOW | RTLD_LOCAL) instead of RTLD_LAZY Signed-off-by: Steve Bennett --- jim-exec.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'jim-exec.c') diff --git a/jim-exec.c b/jim-exec.c index f792fe0..5c9b49f 100644 --- a/jim-exec.c +++ b/jim-exec.c @@ -36,8 +36,6 @@ #include #include -extern char **environ; - #if defined(__GNUC__) && !defined(__clang__) #define IGNORE_RC(EXPR) ((EXPR) < 0 ? -1 : 0) #else @@ -121,7 +119,7 @@ static char **JimBuildEnv(Jim_Interp *interp) Jim_Obj *objPtr = Jim_GetGlobalVariableStr(interp, "env", JIM_NONE); if (!objPtr) { - return environ; + return Jim_GetEnviron(); } /* Calculate the required size */ @@ -151,7 +149,7 @@ static char **JimBuildEnv(Jim_Interp *interp) return env; #else - return environ; + return Jim_GetEnviron(); #endif } @@ -631,8 +629,8 @@ badargs: } /* Must do this before vfork(), so do it now */ - orig_environ = environ; - environ = JimBuildEnv(interp); + orig_environ = Jim_GetEnviron(); + Jim_SetEnviron(JimBuildEnv(interp)); /* * Set up the redirected input source for the pipeline, if @@ -954,8 +952,8 @@ badargs: } Jim_Free(arg_array); - JimFreeEnv(interp, environ, orig_environ); - environ = orig_environ; + JimFreeEnv(interp, Jim_GetEnviron(), orig_environ); + Jim_SetEnviron(orig_environ); return numPids; -- cgit v1.1