diff options
author | Steve Bennett <steveb@workware.net.au> | 2011-04-04 14:28:42 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2011-06-09 11:45:57 +1000 |
commit | 980235d194353a1ee9109303f5a12bb42f68d6c3 (patch) | |
tree | b139bff3d923c7288952078b0c915abfe776286c /jim-exec.c | |
parent | 64716bd6592527d31b6c5e79295d0218afc98682 (diff) | |
download | jimtcl-980235d194353a1ee9109303f5a12bb42f68d6c3.zip jimtcl-980235d194353a1ee9109303f5a12bb42f68d6c3.tar.gz jimtcl-980235d194353a1ee9109303f5a12bb42f68d6c3.tar.bz2 |
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 <steveb@workware.net.au>
Diffstat (limited to 'jim-exec.c')
-rw-r--r-- | jim-exec.c | 14 |
1 files changed, 6 insertions, 8 deletions
@@ -36,8 +36,6 @@ #include <errno.h> #include <sys/wait.h> -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; |