[Python-checkins] CVS: python/dist/src/PC getpathp.c,1.24,1.25

Mark Hammond mhammond@users.sourceforge.net
2001年9月07日 07:08:03 -0700


Update of /cvsroot/python/python/dist/src/PC
In directory usw-pr-cvs1:/tmp/cvs-serv18370
Modified Files:
	getpathp.c 
Log Message:
Fix bug #410274 - sys.prefix isn't always set.
If after calculating sys.path we do not have sys.prefix set, we loop over all path entries checking if one can point to our home directory.
Index: getpathp.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/PC/getpathp.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -C2 -d -r1.24 -r1.25
*** getpathp.c	2001年07月23日 16:30:27	1.24
--- getpathp.c	2001年09月07日 14:08:01	1.25
***************
*** 45,49 ****
 * When Python is hosted in another exe (different directory, embedded via 
 COM, etc), the Python Home will not be deduced, so the core path from
! the registry is used. Other "application paths "in the registry are 
 always read.
 
--- 45,49 ----
 * When Python is hosted in another exe (different directory, embedded via 
 COM, etc), the Python Home will not be deduced, so the core path from
! the registry is used. Other "application paths" in the registry are 
 always read.
 
***************
*** 577,580 ****
--- 577,614 ----
 	}
 	*buf = '0円';
+ 	/* Now to pull one last hack/trick. If sys.prefix is
+ 	 empty, then try and find it somewhere on the paths
+ 	 we calculated. We scan backwards, as our general policy
+ 	 is that Python core directories are at the *end* of
+ 	 sys.path. We assume that our "lib" directory is
+ 	 on the path, and that our 'prefix' directory is
+ 	 the parent of that.
+ 	*/
+ 	if (*prefix=='0円') {
+ 		char lookBuf[MAXPATHLEN+1];
+ 		char *look = buf - 1; /* 'buf' is at the end of the buffer */
+ 		while (1) {
+ 			int nchars;
+ 			char *lookEnd = look;
+ 			/* 'look' will end up one character before the
+ 			 start of the path in question - even if this
+ 			 is one character before the start of the buffer
+ 			*/
+ 			while (*look != DELIM && look >= module_search_path)
+ 				look--;
+ 			nchars = lookEnd-look;
+ 			strncpy(lookBuf, look+1, nchars);
+ 			lookBuf[nchars] = '0円';
+ 			/* Up one level to the parent */
+ 			reduce(lookBuf);
+ 			if (search_for_prefix(lookBuf, LANDMARK)) {
+ 				break;
+ 			}
+ 			/* If we are out of paths to search - give up */
+ 			if (look < module_search_path)
+ 				break;
+ 			look--;
+ 		}
+ 	}
 }
 

AltStyle によって変換されたページ (->オリジナル) /