aboutsummaryrefslogtreecommitdiff
path: root/jim-exec.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2011-04-04 14:28:42 +1000
committerSteve Bennett <steveb@workware.net.au>2011-06-09 11:45:57 +1000
commit980235d194353a1ee9109303f5a12bb42f68d6c3 (patch)
treeb139bff3d923c7288952078b0c915abfe776286c /jim-exec.c
parent64716bd6592527d31b6c5e79295d0218afc98682 (diff)
downloadjimtcl-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.c14
1 files changed, 6 insertions, 8 deletions
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 <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;