[Python-checkins] python/dist/src/Modules getpath.c,1.46,1.47
jackjansen at users.sourceforge.net
jackjansen at users.sourceforge.net
Thu Jun 3 10:33:06 EDT 2004
Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14964
Modified Files:
getpath.c
Log Message:
Fix for #932977: MacOSX does not pass the whole pathname in argv[0] for
#!-scripts, only the filename part, and this can lead to incorrect
initialization of sys.path and sys.executable if there is another python
on $PATH before the one used in #!.
The fix was picked up from the darwinports crowd, thanks!
Index: getpath.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/getpath.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -C2 -d -r1.46 -r1.47
*** getpath.c 31 Dec 2002 12:45:12 -0000 1.46
--- getpath.c 3 Jun 2004 14:33:03 -0000 1.47
***************
*** 375,378 ****
--- 375,381 ----
NSModule pythonModule;
#endif
+ #ifdef __APPLE__
+ unsigned long nsexeclength = MAXPATHLEN;
+ #endif
/* If there is no slash in the argv0 path, then we have to
***************
*** 383,386 ****
--- 386,403 ----
if (strchr(prog, SEP))
strncpy(progpath, prog, MAXPATHLEN);
+ #ifdef __APPLE__
+ /* On Mac OS X, if a script uses an interpreter of the form
+ * "#!/opt/python2.3/bin/python", the kernel only passes "python"
+ * as argv[0], which falls through to the $PATH search below.
+ * If /opt/python2.3/bin isn't in your path, or is near the end,
+ * this algorithm may incorrectly find /usr/bin/python. To work
+ * around this, we can use _NSGetExecutablePath to get a better
+ * hint of what the intended interpreter was, although this
+ * will fail if a relative path was used. but in that case,
+ * absolutize() should help us out below
+ */
+ else if(0 == _NSGetExecutablePath(progpath, &nsexeclength) && progpath[0] == SEP)
+ ;
+ #endif // __APPLE__
else if (path) {
while (1) {
More information about the Python-checkins
mailing list