[Python-checkins] r69541 - in python/branches/release30-maint: Lib/test/test_osx_env.py Modules/getpath.c Modules/main.c
ronald.oussoren
python-checkins at python.org
Thu Feb 12 16:56:48 CET 2009
Author: ronald.oussoren
Date: Thu Feb 12 16:56:48 2009
New Revision: 69541
Log:
Merged revisions 69540 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r69540 | ronald.oussoren | 2009年02月12日 16:55:38 +0100 (2009年2月12日) | 5 lines
This fixes issue5143 and includes a test.
Issue5143 notes that getpath.c and main.c pass a 'char*' where
a 'wchar_t*' is expected on OSX.
........
Added:
python/branches/release30-maint/Lib/test/test_osx_env.py
- copied unchanged from r69540, /python/branches/py3k/Lib/test/test_osx_env.py
Modified:
python/branches/release30-maint/ (props changed)
python/branches/release30-maint/Modules/getpath.c
python/branches/release30-maint/Modules/main.c
Modified: python/branches/release30-maint/Modules/getpath.c
==============================================================================
--- python/branches/release30-maint/Modules/getpath.c (original)
+++ python/branches/release30-maint/Modules/getpath.c Thu Feb 12 16:56:48 2009
@@ -457,6 +457,7 @@
#else
unsigned long nsexeclength = MAXPATHLEN;
#endif
+ char execpath[MAXPATHLEN+1];
#endif
if (_path) {
@@ -486,8 +487,13 @@
* 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)
- ;
+ else if(0 == _NSGetExecutablePath(execpath, &nsexeclength) && execpath[0] == SEP) {
+ size_t r = mbstowcs(progpath, execpath, MAXPATHLEN+1);
+ if (r == (size_t)-1 || r > MAXPATHLEN) {
+ /* Could not convert execpath, or it's too long. */
+ progpath[0] = '0円';
+ }
+ }
#endif /* __APPLE__ */
else if (path) {
while (1) {
Modified: python/branches/release30-maint/Modules/main.c
==============================================================================
--- python/branches/release30-maint/Modules/main.c (original)
+++ python/branches/release30-maint/Modules/main.c Thu Feb 12 16:56:48 2009
@@ -487,10 +487,23 @@
so the actual executable path is passed in an environment variable.
See Lib/plat-mac/bundlebuiler.py for details about the bootstrap
script. */
- if ((p = Py_GETENV("PYTHONEXECUTABLE")) && *p != '0円')
- Py_SetProgramName(p);
- else
+ if ((p = Py_GETENV("PYTHONEXECUTABLE")) && *p != '0円') {
+ wchar_t* buffer;
+ size_t len = strlen(p);
+ size_t r;
+
+ buffer = malloc(len * sizeof(wchar_t));
+ if (buffer == NULL) {
+ Py_FatalError(
+ "not enough memory to copy PYTHONEXECUTABLE");
+ }
+
+ r = mbstowcs(buffer, p, len);
+ Py_SetProgramName(buffer);
+ /* buffer is now handed off - do not free */
+ } else {
Py_SetProgramName(argv[0]);
+ }
#else
Py_SetProgramName(argv[0]);
#endif
More information about the Python-checkins
mailing list