Mercurial > cpython-lru_cache-weakref
annotate PC/getpathp.c @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 18bb92b0c458 |
| children |
| rev | line source |
|---|---|
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 /* Return the initial module search path. */ |
|
79479
d853354e1470
#16135: Removal of OS/2 support (Remove OS2 and OS/2 references)
Jesus Cea <jcea@jcea.es>
parents:
77154
diff
changeset
|
3 /* Used by DOS, Windows 3.1, Windows 95/98, Windows NT. */ |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 |
|
12116
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
5 /* ---------------------------------------------------------------- |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
6 PATH RULES FOR WINDOWS: |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
7 This describes how sys.path is formed on Windows. It describes the |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
8 functionality, not the implementation (ie, the order in which these |
|
12116
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
9 are actually fetched is different) |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
10 |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
11 * Python always adds an empty entry at the start, which corresponds |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
12 to the current directory. |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
13 |
|
35276
4adbd331d335
Fix all wrong instances of "it's".
Georg Brandl <georg@python.org>
parents:
33017
diff
changeset
|
14 * If the PYTHONPATH env. var. exists, its entries are added next. |
|
12116
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
15 |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
16 * We look in the registry for "application paths" - that is, sub-keys |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
17 under the main PythonPath registry key. These are added next (the |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
18 order of sub-key processing is undefined). |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
19 HKEY_CURRENT_USER is searched and added first. |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
20 HKEY_LOCAL_MACHINE is searched and added next. |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
21 (Note that all known installers only use HKLM, so HKCU is typically |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
22 empty) |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
23 |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
24 * We attempt to locate the "Python Home" - if the PYTHONHOME env var |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
25 is set, we believe it. Otherwise, we use the path of our host .EXE's |
|
12775
8e2b35d386aa
Patch from M.-A. Lemburg:
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
12116
diff
changeset
|
26 to try and locate our "landmark" (lib\\os.py) and deduce our home. |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
27 - If we DO have a Python Home: The relevant sub-directories (Lib, |
|
47135
cce1b243c11d
Tkinter, step 5: remove lib-tk subdirectory and update all places where it was mentioned.
Georg Brandl <georg@python.org>
parents:
46318
diff
changeset
|
28 plat-win, etc) are based on the Python Home |
|
12116
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
29 - If we DO NOT have a Python Home, the core Python Path is |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
30 loaded from the registry. This is the main PythonPath key, |
|
12116
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
31 and both HKLM and HKCU are combined to form the path) |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
32 |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
33 * Iff - we can not locate the Python Home, have not had a PYTHONPATH |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
34 specified, and can't locate any Registry entries (ie, we have _nothing_ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
35 we can assume is a good path), a default path with relative entries is |
|
12116
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
36 used (eg. .\Lib;.\plat-win, etc) |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
37 |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
38 |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
39 The end result of all this is: |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
40 * When running python.exe, or any other .exe in the main Python directory |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
41 (either an installed version, or directly from the PCbuild directory), |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
42 the core path is deduced, and the core paths in the registry are |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
43 ignored. Other "application paths" in the registry are always read. |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
44 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
45 * When Python is hosted in another exe (different directory, embedded via |
|
12116
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
46 COM, etc), the Python Home will not be deduced, so the core path from |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
47 the registry is used. Other "application paths" in the registry are |
|
12116
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
48 always read. |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
49 |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
50 * If Python can't find its home and there is no registry (eg, frozen |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
51 exe, some very strange installation setup) you get a path with |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
52 some default, but relative, paths. |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
53 |
|
64955
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
54 * An embedding application can use Py_SetPath() to override all of |
|
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
55 these authomatic path computations. |
|
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
56 |
|
12116
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
57 ---------------------------------------------------------------- */ |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
58 |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
59 |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
60 #include "Python.h" |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
61 #include "osdefs.h" |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
62 #include <wchar.h> |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
63 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
64 #ifdef MS_WINDOWS |
|
5999
f2d134bf6973
Some changes to make it work on NT; add the directory where the binary
Guido van Rossum <guido@python.org>
parents:
5545
diff
changeset
|
65 #include <windows.h> |
|
f2d134bf6973
Some changes to make it work on NT; add the directory where the binary
Guido van Rossum <guido@python.org>
parents:
5545
diff
changeset
|
66 #endif |
|
f2d134bf6973
Some changes to make it work on NT; add the directory where the binary
Guido van Rossum <guido@python.org>
parents:
5545
diff
changeset
|
67 |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
36507
diff
changeset
|
68 #ifdef HAVE_SYS_TYPES_H |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
69 #include <sys/types.h> |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
36507
diff
changeset
|
70 #endif /* HAVE_SYS_TYPES_H */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
36507
diff
changeset
|
71 |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
36507
diff
changeset
|
72 #ifdef HAVE_SYS_STAT_H |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
73 #include <sys/stat.h> |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
36507
diff
changeset
|
74 #endif /* HAVE_SYS_STAT_H */ |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
36507
diff
changeset
|
75 |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
76 #include <string.h> |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
77 |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
78 /* Search in some common locations for the associated Python libraries. |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
79 * |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
80 * Py_GetPath() tries to return a sensible Python module search path. |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 * |
|
7407
2c54901471f5
Fix some outdated comments (mostly by removing a large comment block
Guido van Rossum <guido@python.org>
parents:
6826
diff
changeset
|
82 * The approach is an adaptation for Windows of the strategy used in |
|
2c54901471f5
Fix some outdated comments (mostly by removing a large comment block
Guido van Rossum <guido@python.org>
parents:
6826
diff
changeset
|
83 * ../Modules/getpath.c; it uses the Windows Registry as one of its |
|
2c54901471f5
Fix some outdated comments (mostly by removing a large comment block
Guido van Rossum <guido@python.org>
parents:
6826
diff
changeset
|
84 * information sources. |
|
64955
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
85 * |
|
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
86 * Py_SetPath() can be used to override this mechanism. Call Py_SetPath |
|
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
87 * with a semicolon separated path prior to calling Py_Initialize. |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
88 */ |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
89 |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
90 #ifndef LANDMARK |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
91 #define LANDMARK L"lib\\os.py" |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
92 #endif |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
94 static wchar_t prefix[MAXPATHLEN+1]; |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
95 static wchar_t progpath[MAXPATHLEN+1]; |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
96 static wchar_t dllpath[MAXPATHLEN+1]; |
|
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
97 static wchar_t *module_search_path = NULL; |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 |
|
6001
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
99 |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
100 static int |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
101 is_sep(wchar_t ch) /* determine if "ch" is a separator character */ |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
102 { |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
103 #ifdef ALTSEP |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
104 return ch == SEP || ch == ALTSEP; |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
105 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
106 return ch == SEP; |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
107 #endif |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
108 } |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
109 |
|
15084
9be67c5a823a
Prevent possible buffer overflow exploits under Windows. As per (the very quick) patch Patch #101801.
Mark Hammond <mhammond@skippinet.com.au>
parents:
14500
diff
changeset
|
110 /* assumes 'dir' null terminated in bounds. Never writes |
|
9be67c5a823a
Prevent possible buffer overflow exploits under Windows. As per (the very quick) patch Patch #101801.
Mark Hammond <mhammond@skippinet.com.au>
parents:
14500
diff
changeset
|
111 beyond existing terminator. |
|
9be67c5a823a
Prevent possible buffer overflow exploits under Windows. As per (the very quick) patch Patch #101801.
Mark Hammond <mhammond@skippinet.com.au>
parents:
14500
diff
changeset
|
112 */ |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
113 static void |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
114 reduce(wchar_t *dir) |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
115 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
116 size_t i = wcslen(dir); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
117 while (i > 0 && !is_sep(dir[i])) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
118 --i; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
119 dir[i] = '\0'; |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
120 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
121 |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
122 |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
123 static int |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
124 exists(wchar_t *filename) |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
125 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
126 return GetFileAttributesW(filename) != 0xFFFFFFFF; |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
127 } |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
128 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
129 /* Assumes 'filename' MAXPATHLEN+1 bytes long - |
|
15084
9be67c5a823a
Prevent possible buffer overflow exploits under Windows. As per (the very quick) patch Patch #101801.
Mark Hammond <mhammond@skippinet.com.au>
parents:
14500
diff
changeset
|
130 may extend 'filename' by one character. |
|
9be67c5a823a
Prevent possible buffer overflow exploits under Windows. As per (the very quick) patch Patch #101801.
Mark Hammond <mhammond@skippinet.com.au>
parents:
14500
diff
changeset
|
131 */ |
|
8902
6f73ae1cf934
Sigh. More restructuring was needed.
Guido van Rossum <guido@python.org>
parents:
8895
diff
changeset
|
132 static int |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
133 ismodule(wchar_t *filename) /* Is module -- check for .pyc/.pyo too */ |
|
8902
6f73ae1cf934
Sigh. More restructuring was needed.
Guido van Rossum <guido@python.org>
parents:
8895
diff
changeset
|
134 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
135 if (exists(filename)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
136 return 1; |
|
8902
6f73ae1cf934
Sigh. More restructuring was needed.
Guido van Rossum <guido@python.org>
parents:
8895
diff
changeset
|
137 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
138 /* Check for the compiled version of prefix. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
139 if (wcslen(filename) < MAXPATHLEN) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
140 wcscat(filename, Py_OptimizeFlag ? L"o" : L"c"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
141 if (exists(filename)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
142 return 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
143 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
144 return 0; |
|
8902
6f73ae1cf934
Sigh. More restructuring was needed.
Guido van Rossum <guido@python.org>
parents:
8895
diff
changeset
|
145 } |
|
6f73ae1cf934
Sigh. More restructuring was needed.
Guido van Rossum <guido@python.org>
parents:
8895
diff
changeset
|
146 |
|
33017
ab93aff4c90a
SF bug 1003471: Python 1.5.2 security vulnerability
Tim Peters <tim.peters@gmail.com>
parents:
30180
diff
changeset
|
147 /* Add a path component, by appending stuff to buffer. |
|
ab93aff4c90a
SF bug 1003471: Python 1.5.2 security vulnerability
Tim Peters <tim.peters@gmail.com>
parents:
30180
diff
changeset
|
148 buffer must have at least MAXPATHLEN + 1 bytes allocated, and contain a |
|
ab93aff4c90a
SF bug 1003471: Python 1.5.2 security vulnerability
Tim Peters <tim.peters@gmail.com>
parents:
30180
diff
changeset
|
149 NUL-terminated string with no more than MAXPATHLEN characters (not counting |
|
ab93aff4c90a
SF bug 1003471: Python 1.5.2 security vulnerability
Tim Peters <tim.peters@gmail.com>
parents:
30180
diff
changeset
|
150 the trailing NUL). It's a fatal error if it contains a string longer than |
|
ab93aff4c90a
SF bug 1003471: Python 1.5.2 security vulnerability
Tim Peters <tim.peters@gmail.com>
parents:
30180
diff
changeset
|
151 that (callers must be careful!). If these requirements are met, it's |
|
ab93aff4c90a
SF bug 1003471: Python 1.5.2 security vulnerability
Tim Peters <tim.peters@gmail.com>
parents:
30180
diff
changeset
|
152 guaranteed that buffer will still be a NUL-terminated string with no more |
|
ab93aff4c90a
SF bug 1003471: Python 1.5.2 security vulnerability
Tim Peters <tim.peters@gmail.com>
parents:
30180
diff
changeset
|
153 than MAXPATHLEN characters at exit. If stuff is too long, only as much of |
|
ab93aff4c90a
SF bug 1003471: Python 1.5.2 security vulnerability
Tim Peters <tim.peters@gmail.com>
parents:
30180
diff
changeset
|
154 stuff as fits will be appended. |
|
ab93aff4c90a
SF bug 1003471: Python 1.5.2 security vulnerability
Tim Peters <tim.peters@gmail.com>
parents:
30180
diff
changeset
|
155 */ |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
156 static void |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
157 join(wchar_t *buffer, wchar_t *stuff) |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
158 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
159 size_t n, k; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
160 if (is_sep(stuff[0])) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
161 n = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
162 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
163 n = wcslen(buffer); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
164 if (n > 0 && !is_sep(buffer[n-1]) && n < MAXPATHLEN) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
165 buffer[n++] = SEP; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
166 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
167 if (n > MAXPATHLEN) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
168 Py_FatalError("buffer overflow in getpathp.c's joinpath()"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
169 k = wcslen(stuff); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
170 if (n + k > MAXPATHLEN) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
171 k = MAXPATHLEN - n; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
172 wcsncpy(buffer+n, stuff, k); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
173 buffer[n+k] = '\0'; |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
174 } |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
175 |
|
15084
9be67c5a823a
Prevent possible buffer overflow exploits under Windows. As per (the very quick) patch Patch #101801.
Mark Hammond <mhammond@skippinet.com.au>
parents:
14500
diff
changeset
|
176 /* gotlandmark only called by search_for_prefix, which ensures |
|
9be67c5a823a
Prevent possible buffer overflow exploits under Windows. As per (the very quick) patch Patch #101801.
Mark Hammond <mhammond@skippinet.com.au>
parents:
14500
diff
changeset
|
177 'prefix' is null terminated in bounds. join() ensures |
|
9be67c5a823a
Prevent possible buffer overflow exploits under Windows. As per (the very quick) patch Patch #101801.
Mark Hammond <mhammond@skippinet.com.au>
parents:
14500
diff
changeset
|
178 'landmark' can not overflow prefix if too long. |
|
9be67c5a823a
Prevent possible buffer overflow exploits under Windows. As per (the very quick) patch Patch #101801.
Mark Hammond <mhammond@skippinet.com.au>
parents:
14500
diff
changeset
|
179 */ |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
180 static int |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
181 gotlandmark(wchar_t *landmark) |
|
12090
9877e978170e
Changes to completely ignore the registry when it detects that you are
Guido van Rossum <guido@python.org>
parents:
8967
diff
changeset
|
182 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
183 int ok; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
184 Py_ssize_t n; |
|
12090
9877e978170e
Changes to completely ignore the registry when it detects that you are
Guido van Rossum <guido@python.org>
parents:
8967
diff
changeset
|
185 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
186 n = wcslen(prefix); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
187 join(prefix, landmark); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
188 ok = ismodule(prefix); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
189 prefix[n] = '\0'; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
190 return ok; |
|
12090
9877e978170e
Changes to completely ignore the registry when it detects that you are
Guido van Rossum <guido@python.org>
parents:
8967
diff
changeset
|
191 } |
|
9877e978170e
Changes to completely ignore the registry when it detects that you are
Guido van Rossum <guido@python.org>
parents:
8967
diff
changeset
|
192 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
193 /* assumes argv0_path is MAXPATHLEN+1 bytes long, already \0 term'd. |
|
15084
9be67c5a823a
Prevent possible buffer overflow exploits under Windows. As per (the very quick) patch Patch #101801.
Mark Hammond <mhammond@skippinet.com.au>
parents:
14500
diff
changeset
|
194 assumption provided by only caller, calculate_path() */ |
|
12090
9877e978170e
Changes to completely ignore the registry when it detects that you are
Guido van Rossum <guido@python.org>
parents:
8967
diff
changeset
|
195 static int |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
196 search_for_prefix(wchar_t *argv0_path, wchar_t *landmark) |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
197 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
198 /* Search from argv0_path, until landmark is found */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
199 wcscpy(prefix, argv0_path); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
200 do { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
201 if (gotlandmark(landmark)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
202 return 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
203 reduce(prefix); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
204 } while (prefix[0]); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
205 return 0; |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
206 } |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
207 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
208 #ifdef MS_WINDOWS |
|
51264
87a985a1b5c9
Merged revisions 69207 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47667
diff
changeset
|
209 #ifdef Py_ENABLE_SHARED |
|
8902
6f73ae1cf934
Sigh. More restructuring was needed.
Guido van Rossum <guido@python.org>
parents:
8895
diff
changeset
|
210 |
|
12116
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
211 /* a string loaded from the DLL at startup.*/ |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
212 extern const char *PyWin_DLLVersionString; |
|
6356
a857d2f87336
Seem to be some changes related to DLL version from string resource,
Guido van Rossum <guido@python.org>
parents:
6001
diff
changeset
|
213 |
|
6001
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
214 |
|
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
215 /* Load a PYTHONPATH value from the registry. |
|
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
216 Load from either HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER. |
|
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
217 |
|
12116
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
218 Works in both Unicode and 8bit environments. Only uses the |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
219 Ex family of functions so it also works with Windows CE. |
|
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
220 |
|
6001
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
221 Returns NULL, or a pointer that should be freed. |
|
16748
e444a5271181
Checkin updated version of patch #103933 . As Thomas says, fixes the bugs #131064, #129584, #127722. See the discussion in bug #131064
Mark Hammond <mhammond@skippinet.com.au>
parents:
15084
diff
changeset
|
222 |
|
e444a5271181
Checkin updated version of patch #103933 . As Thomas says, fixes the bugs #131064, #129584, #127722. See the discussion in bug #131064
Mark Hammond <mhammond@skippinet.com.au>
parents:
15084
diff
changeset
|
223 XXX - this code is pretty strange, as it used to also |
|
e444a5271181
Checkin updated version of patch #103933 . As Thomas says, fixes the bugs #131064, #129584, #127722. See the discussion in bug #131064
Mark Hammond <mhammond@skippinet.com.au>
parents:
15084
diff
changeset
|
224 work on Win16, where the buffer sizes werent available |
|
e444a5271181
Checkin updated version of patch #103933 . As Thomas says, fixes the bugs #131064, #129584, #127722. See the discussion in bug #131064
Mark Hammond <mhammond@skippinet.com.au>
parents:
15084
diff
changeset
|
225 in advance. It could be simplied now Win16/Win32s is dead! |
|
6001
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
226 */ |
|
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
227 |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
228 static wchar_t * |
|
12116
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
229 getpythonregpath(HKEY keyBase, int skipcore) |
|
6001
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
230 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
231 HKEY newKey = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
232 DWORD dataSize = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
233 DWORD numKeys = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
234 LONG rc; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
235 wchar_t *retval = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
236 WCHAR *dataBuf = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
237 static const WCHAR keyPrefix[] = L"Software\\Python\\PythonCore\\"; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
238 static const WCHAR keySuffix[] = L"\\PythonPath"; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
239 size_t versionLen; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
240 DWORD index; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
241 WCHAR *keyBuf = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
242 WCHAR *keyBufPtr; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
243 WCHAR **ppPaths = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
244 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
245 /* Tried to use sysget("winver") but here is too early :-( */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
246 versionLen = strlen(PyWin_DLLVersionString); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
247 /* Space for all the chars, plus one \0 */ |
|
84490
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
248 keyBuf = keyBufPtr = PyMem_RawMalloc(sizeof(keyPrefix) + |
|
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
249 sizeof(WCHAR)*(versionLen-1) + |
|
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
250 sizeof(keySuffix)); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
251 if (keyBuf==NULL) goto done; |
|
6356
a857d2f87336
Seem to be some changes related to DLL version from string resource,
Guido van Rossum <guido@python.org>
parents:
6001
diff
changeset
|
252 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
253 memcpy(keyBufPtr, keyPrefix, sizeof(keyPrefix)-sizeof(WCHAR)); |
|
72510
b534b56379cb
Use the new Py_ARRAY_LENGTH macro
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66664
diff
changeset
|
254 keyBufPtr += Py_ARRAY_LENGTH(keyPrefix) - 1; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
255 mbstowcs(keyBufPtr, PyWin_DLLVersionString, versionLen); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
256 keyBufPtr += versionLen; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
257 /* NULL comes with this one! */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
258 memcpy(keyBufPtr, keySuffix, sizeof(keySuffix)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
259 /* Open the root Python key */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
260 rc=RegOpenKeyExW(keyBase, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
261 keyBuf, /* subkey */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
262 0, /* reserved */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
263 KEY_READ, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
264 &newKey); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
265 if (rc!=ERROR_SUCCESS) goto done; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
266 /* Find out how big our core buffer is, and how many subkeys we have */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
267 rc = RegQueryInfoKey(newKey, NULL, NULL, NULL, &numKeys, NULL, NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
268 NULL, NULL, &dataSize, NULL, NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
269 if (rc!=ERROR_SUCCESS) goto done; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
270 if (skipcore) dataSize = 0; /* Only count core ones if we want them! */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
271 /* Allocate a temp array of char buffers, so we only need to loop |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
272 reading the registry once |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
273 */ |
|
84490
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
274 ppPaths = PyMem_RawMalloc( sizeof(WCHAR *) * numKeys ); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
275 if (ppPaths==NULL) goto done; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
276 memset(ppPaths, 0, sizeof(WCHAR *) * numKeys); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
277 /* Loop over all subkeys, allocating a temp sub-buffer. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
278 for(index=0;index<numKeys;index++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
279 WCHAR keyBuf[MAX_PATH+1]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
280 HKEY subKey = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
281 DWORD reqdSize = MAX_PATH+1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
282 /* Get the sub-key name */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
283 DWORD rc = RegEnumKeyExW(newKey, index, keyBuf, &reqdSize, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
284 NULL, NULL, NULL, NULL ); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
285 if (rc!=ERROR_SUCCESS) goto done; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
286 /* Open the sub-key */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
287 rc=RegOpenKeyExW(newKey, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
288 keyBuf, /* subkey */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
289 0, /* reserved */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
290 KEY_READ, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
291 &subKey); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
292 if (rc!=ERROR_SUCCESS) goto done; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
293 /* Find the value of the buffer size, malloc, then read it */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
294 RegQueryValueExW(subKey, NULL, 0, NULL, NULL, &reqdSize); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
295 if (reqdSize) { |
|
84490
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
296 ppPaths[index] = PyMem_RawMalloc(reqdSize); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
297 if (ppPaths[index]) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
298 RegQueryValueExW(subKey, NULL, 0, NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
299 (LPBYTE)ppPaths[index], |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
300 &reqdSize); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
301 dataSize += reqdSize + 1; /* 1 for the ";" */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
302 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
303 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
304 RegCloseKey(subKey); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
305 } |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
36507
diff
changeset
|
306 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
307 /* return null if no path to return */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
308 if (dataSize == 0) goto done; |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
36507
diff
changeset
|
309 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
310 /* original datasize from RegQueryInfo doesn't include the \0 */ |
|
84490
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
311 dataBuf = PyMem_RawMalloc((dataSize+1) * sizeof(WCHAR)); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
312 if (dataBuf) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
313 WCHAR *szCur = dataBuf; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
314 DWORD reqdSize = dataSize; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
315 /* Copy our collected strings */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
316 for (index=0;index<numKeys;index++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
317 if (index > 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
318 *(szCur++) = L';'; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
319 dataSize--; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
320 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
321 if (ppPaths[index]) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
322 Py_ssize_t len = wcslen(ppPaths[index]); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
323 wcsncpy(szCur, ppPaths[index], len); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
324 szCur += len; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
325 assert(dataSize > (DWORD)len); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
326 dataSize -= (DWORD)len; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
327 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
328 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
329 if (skipcore) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
330 *szCur = '\0'; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
331 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
332 /* If we have no values, we dont need a ';' */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
333 if (numKeys) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
334 *(szCur++) = L';'; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
335 dataSize--; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
336 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
337 /* Now append the core path entries - |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
338 this will include the NULL |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
339 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
340 rc = RegQueryValueExW(newKey, NULL, 0, NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
341 (LPBYTE)szCur, &dataSize); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
342 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
343 /* And set the result - caller must free */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
344 retval = dataBuf; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
345 } |
|
12116
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
346 done: |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
347 /* Loop freeing my temp buffers */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
348 if (ppPaths) { |
|
84490
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
349 for(index=0; index<numKeys; index++) |
|
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
350 PyMem_RawFree(ppPaths[index]); |
|
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
351 PyMem_RawFree(ppPaths); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
352 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
353 if (newKey) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
354 RegCloseKey(newKey); |
|
84490
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
355 PyMem_RawFree(keyBuf); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
356 return retval; |
|
6001
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
357 } |
|
51264
87a985a1b5c9
Merged revisions 69207 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47667
diff
changeset
|
358 #endif /* Py_ENABLE_SHARED */ |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
359 #endif /* MS_WINDOWS */ |
|
6001
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
360 |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
361 static void |
|
13660
a1ce07218781
Miscelaneous ANSIfications. I'm assuming here 'main' should take (int,
Thomas Wouters <thomas@python.org>
parents:
13256
diff
changeset
|
362 get_progpath(void) |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
363 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
364 extern wchar_t *Py_GetProgramName(void); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
365 wchar_t *path = _wgetenv(L"PATH"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
366 wchar_t *prog = Py_GetProgramName(); |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
367 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
368 #ifdef MS_WINDOWS |
|
51264
87a985a1b5c9
Merged revisions 69207 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47667
diff
changeset
|
369 #ifdef Py_ENABLE_SHARED |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
370 extern HANDLE PyWin_DLLhModule; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
371 /* static init of progpath ensures final char remains \0 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
372 if (PyWin_DLLhModule) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
373 if (!GetModuleFileNameW(PyWin_DLLhModule, dllpath, MAXPATHLEN)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
374 dllpath[0] = 0; |
|
51264
87a985a1b5c9
Merged revisions 69207 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47667
diff
changeset
|
375 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
376 dllpath[0] = 0; |
|
51264
87a985a1b5c9
Merged revisions 69207 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47667
diff
changeset
|
377 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
378 if (GetModuleFileNameW(NULL, progpath, MAXPATHLEN)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
379 return; |
|
6001
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
380 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
381 if (prog == NULL || *prog == '\0') |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
382 prog = L"python"; |
|
6001
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
383 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
384 /* If there is no slash in the argv0 path, then we have to |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
385 * assume python is on the user's $PATH, since there's no |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
386 * other way to find a directory to start the search from. If |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
387 * $PATH isn't exported, you lose. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
388 */ |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
389 #ifdef ALTSEP |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
390 if (wcschr(prog, SEP) || wcschr(prog, ALTSEP)) |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
391 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
392 if (wcschr(prog, SEP)) |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
393 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
394 wcsncpy(progpath, prog, MAXPATHLEN); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
395 else if (path) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
396 while (1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
397 wchar_t *delim = wcschr(path, DELIM); |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
398 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
399 if (delim) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
400 size_t len = delim - path; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
401 /* ensure we can't overwrite buffer */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
402 len = min(MAXPATHLEN,len); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
403 wcsncpy(progpath, path, len); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
404 *(progpath + len) = '\0'; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
405 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
406 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
407 wcsncpy(progpath, path, MAXPATHLEN); |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
408 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
409 /* join() is safe for MAXPATHLEN+1 size buffer */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
410 join(progpath, prog); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
411 if (exists(progpath)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
412 break; |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
413 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
414 if (!delim) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
415 progpath[0] = '\0'; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
416 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
417 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
418 path = delim + 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
419 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
420 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
421 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
422 progpath[0] = '\0'; |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
423 } |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
424 |
|
77154
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
425 static int |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
426 find_env_config_value(FILE * env_file, const wchar_t * key, wchar_t * value) |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
427 { |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
428 int result = 0; /* meaning not found */ |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
429 char buffer[MAXPATHLEN*2+1]; /* allow extra for key, '=', etc. */ |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
430 |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
431 fseek(env_file, 0, SEEK_SET); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
432 while (!feof(env_file)) { |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
433 char * p = fgets(buffer, MAXPATHLEN*2, env_file); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
434 wchar_t tmpbuffer[MAXPATHLEN*2+1]; |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
435 PyObject * decoded; |
|
84030
41b8be55b160
Issue #9566: Fix compiler warning on Windows 64-bit
Victor Stinner <victor.stinner@gmail.com>
parents:
79479
diff
changeset
|
436 size_t n; |
|
77154
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
437 |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
438 if (p == NULL) |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
439 break; |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
440 n = strlen(p); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
441 if (p[n - 1] != '\n') { |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
442 /* line has overflowed - bail */ |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
443 break; |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
444 } |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
445 if (p[0] == '#') /* Comment - skip */ |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
446 continue; |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
447 decoded = PyUnicode_DecodeUTF8(buffer, n, "surrogateescape"); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
448 if (decoded != NULL) { |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
449 Py_ssize_t k; |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
450 k = PyUnicode_AsWideChar(decoded, |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
451 tmpbuffer, MAXPATHLEN * 2); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
452 Py_DECREF(decoded); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
453 if (k >= 0) { |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
454 wchar_t * tok = wcstok(tmpbuffer, L" \t\r\n"); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
455 if ((tok != NULL) && !wcscmp(tok, key)) { |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
456 tok = wcstok(NULL, L" \t"); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
457 if ((tok != NULL) && !wcscmp(tok, L"=")) { |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
458 tok = wcstok(NULL, L"\r\n"); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
459 if (tok != NULL) { |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
460 wcsncpy(value, tok, MAXPATHLEN); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
461 result = 1; |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
462 break; |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
463 } |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
464 } |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
465 } |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
466 } |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
467 } |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
468 } |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
469 return result; |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
470 } |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
471 |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
472 static void |
|
13660
a1ce07218781
Miscelaneous ANSIfications. I'm assuming here 'main' should take (int,
Thomas Wouters <thomas@python.org>
parents:
13256
diff
changeset
|
473 calculate_path(void) |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
474 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
475 wchar_t argv0_path[MAXPATHLEN+1]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
476 wchar_t *buf; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
477 size_t bufsz; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
478 wchar_t *pythonhome = Py_GetPythonHome(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
479 wchar_t *envpath = NULL; |
|
8902
6f73ae1cf934
Sigh. More restructuring was needed.
Guido van Rossum <guido@python.org>
parents:
8895
diff
changeset
|
480 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
481 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
482 int skiphome, skipdefault; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
483 wchar_t *machinepath = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
484 wchar_t *userpath = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
485 wchar_t zip_path[MAXPATHLEN+1]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
486 size_t len; |
|
54650
f5828742b46f
Merged revisions 73322 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
51264
diff
changeset
|
487 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
488 if (!Py_IgnoreEnvironmentFlag) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
489 envpath = _wgetenv(L"PYTHONPATH"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
490 } |
|
54650
f5828742b46f
Merged revisions 73322 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
51264
diff
changeset
|
491 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
492 char *_envpath = Py_GETENV("PYTHONPATH"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
493 wchar_t wenvpath[MAXPATHLEN+1]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
494 if (_envpath) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
495 size_t r = mbstowcs(wenvpath, _envpath, MAXPATHLEN+1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
496 envpath = wenvpath; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
497 if (r == (size_t)-1 || r >= MAXPATHLEN) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
498 envpath = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
499 } |
|
54650
f5828742b46f
Merged revisions 73322 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
51264
diff
changeset
|
500 #endif |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
501 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
502 get_progpath(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
503 /* progpath guaranteed \0 terminated in MAXPATH+1 bytes. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
504 wcscpy(argv0_path, progpath); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
505 reduce(argv0_path); |
|
77154
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
506 |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
507 /* Search for an environment configuration file, first in the |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
508 executable's directory and then in the parent directory. |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
509 If found, open it for use when searching for prefixes. |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
510 */ |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
511 |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
512 { |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
513 wchar_t tmpbuffer[MAXPATHLEN+1]; |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
514 wchar_t *env_cfg = L"pyvenv.cfg"; |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
515 FILE * env_file = NULL; |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
516 |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
517 wcscpy(tmpbuffer, argv0_path); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
518 join(tmpbuffer, env_cfg); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
519 env_file = _Py_wfopen(tmpbuffer, L"r"); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
520 if (env_file == NULL) { |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
521 errno = 0; |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
522 reduce(tmpbuffer); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
523 reduce(tmpbuffer); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
524 join(tmpbuffer, env_cfg); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
525 env_file = _Py_wfopen(tmpbuffer, L"r"); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
526 if (env_file == NULL) { |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
527 errno = 0; |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
528 } |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
529 } |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
530 if (env_file != NULL) { |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
531 /* Look for a 'home' variable and set argv0_path to it, if found */ |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
532 if (find_env_config_value(env_file, L"home", tmpbuffer)) { |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
533 wcscpy(argv0_path, tmpbuffer); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
534 } |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
535 fclose(env_file); |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
536 env_file = NULL; |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
537 } |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
538 } |
|
294f8aeb4d4b
Implemented PEP 405 (Python virtual environments).
Vinay Sajip <vinay_sajip@yahoo.co.uk>
parents:
72510
diff
changeset
|
539 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
540 if (pythonhome == NULL || *pythonhome == '\0') { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
541 if (search_for_prefix(argv0_path, LANDMARK)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
542 pythonhome = prefix; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
543 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
544 pythonhome = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
545 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
546 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
547 wcsncpy(prefix, pythonhome, MAXPATHLEN); |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
548 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
549 if (envpath && *envpath == '\0') |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
550 envpath = NULL; |
|
6001
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
551 |
|
12090
9877e978170e
Changes to completely ignore the registry when it detects that you are
Guido van Rossum <guido@python.org>
parents:
8967
diff
changeset
|
552 |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
553 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
554 /* Calculate zip archive path */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
555 if (dllpath[0]) /* use name of python DLL */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
556 wcsncpy(zip_path, dllpath, MAXPATHLEN); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
557 else /* use name of executable program */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
558 wcsncpy(zip_path, progpath, MAXPATHLEN); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
559 zip_path[MAXPATHLEN] = '\0'; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
560 len = wcslen(zip_path); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
561 if (len > 4) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
562 zip_path[len-3] = 'z'; /* change ending to "zip" */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
563 zip_path[len-2] = 'i'; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
564 zip_path[len-1] = 'p'; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
565 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
566 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
567 zip_path[0] = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
568 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
569 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
570 skiphome = pythonhome==NULL ? 0 : 1; |
|
51264
87a985a1b5c9
Merged revisions 69207 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47667
diff
changeset
|
571 #ifdef Py_ENABLE_SHARED |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
572 machinepath = getpythonregpath(HKEY_LOCAL_MACHINE, skiphome); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
573 userpath = getpythonregpath(HKEY_CURRENT_USER, skiphome); |
|
51264
87a985a1b5c9
Merged revisions 69207 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47667
diff
changeset
|
574 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
575 /* We only use the default relative PYTHONPATH if we havent |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
576 anything better to use! */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
577 skipdefault = envpath!=NULL || pythonhome!=NULL || \ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
578 machinepath!=NULL || userpath!=NULL; |
|
8902
6f73ae1cf934
Sigh. More restructuring was needed.
Guido van Rossum <guido@python.org>
parents:
8895
diff
changeset
|
579 #endif |
|
6f73ae1cf934
Sigh. More restructuring was needed.
Guido van Rossum <guido@python.org>
parents:
8895
diff
changeset
|
580 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
581 /* We need to construct a path from the following parts. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
582 (1) the PYTHONPATH environment variable, if set; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
583 (2) for Win32, the zip archive file path; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
584 (3) for Win32, the machinepath and userpath, if set; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
585 (4) the PYTHONPATH config macro, with the leading "." |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
586 of each component replaced with pythonhome, if set; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
587 (5) the directory containing the executable (argv0_path). |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
588 The length calculation calculates #4 first. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
589 Extra rules: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
590 - If PYTHONHOME is set (in any way) item (3) is ignored. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
591 - If registry values are used, (4) and (5) are ignored. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
592 */ |
|
6001
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
593 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
594 /* Calculate size of return buffer */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
595 if (pythonhome != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
596 wchar_t *p; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
597 bufsz = 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
598 for (p = PYTHONPATH; *p; p++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
599 if (*p == DELIM) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
600 bufsz++; /* number of DELIM plus one */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
601 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
602 bufsz *= wcslen(pythonhome); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
603 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
604 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
605 bufsz = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
606 bufsz += wcslen(PYTHONPATH) + 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
607 bufsz += wcslen(argv0_path) + 1; |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
608 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
609 if (userpath) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
610 bufsz += wcslen(userpath) + 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
611 if (machinepath) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
612 bufsz += wcslen(machinepath) + 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
613 bufsz += wcslen(zip_path) + 1; |
|
6001
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
614 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
615 if (envpath != NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
616 bufsz += wcslen(envpath) + 1; |
|
6001
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
617 |
|
84490
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
618 module_search_path = buf = PyMem_RawMalloc(bufsz*sizeof(wchar_t)); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
619 if (buf == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
620 /* We can't exit, so print a warning and limp along */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
621 fprintf(stderr, "Can't malloc dynamic PYTHONPATH.\n"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
622 if (envpath) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
623 fprintf(stderr, "Using environment $PYTHONPATH.\n"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
624 module_search_path = envpath; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
625 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
626 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
627 fprintf(stderr, "Using default static path.\n"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
628 module_search_path = PYTHONPATH; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
629 } |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
630 #ifdef MS_WINDOWS |
|
84490
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
631 PyMem_RawFree(machinepath); |
|
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
632 PyMem_RawFree(userpath); |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
633 #endif /* MS_WINDOWS */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
634 return; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
635 } |
|
6001
8056169ec448
Much rewritten. Added Win32 registry stuff (from getpath_nt.c, which
Guido van Rossum <guido@python.org>
parents:
5999
diff
changeset
|
636 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
637 if (envpath) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
638 wcscpy(buf, envpath); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
639 buf = wcschr(buf, L'\0'); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
640 *buf++ = DELIM; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
641 } |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
642 #ifdef MS_WINDOWS |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
643 if (zip_path[0]) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
644 wcscpy(buf, zip_path); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
645 buf = wcschr(buf, L'\0'); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
646 *buf++ = DELIM; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
647 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
648 if (userpath) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
649 wcscpy(buf, userpath); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
650 buf = wcschr(buf, L'\0'); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
651 *buf++ = DELIM; |
|
84490
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
652 PyMem_RawFree(userpath); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
653 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
654 if (machinepath) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
655 wcscpy(buf, machinepath); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
656 buf = wcschr(buf, L'\0'); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
657 *buf++ = DELIM; |
|
84490
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
658 PyMem_RawFree(machinepath); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
659 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
660 if (pythonhome == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
661 if (!skipdefault) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
662 wcscpy(buf, PYTHONPATH); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
663 buf = wcschr(buf, L'\0'); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
664 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
665 } |
|
12116
e6ab3c603ff9
Revamped path access again, by Mark Hammond, to be more robust in the
Guido van Rossum <guido@python.org>
parents:
12090
diff
changeset
|
666 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
667 if (pythonhome == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
668 wcscpy(buf, PYTHONPATH); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
669 buf = wcschr(buf, L'\0'); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
670 } |
|
24071
8142f8d668a0
Patch #569753: Remove support for WIN16.
Martin v. Löwis <martin@v.loewis.de>
parents:
21712
diff
changeset
|
671 #endif /* MS_WINDOWS */ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
672 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
673 wchar_t *p = PYTHONPATH; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
674 wchar_t *q; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
675 size_t n; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
676 for (;;) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
677 q = wcschr(p, DELIM); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
678 if (q == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
679 n = wcslen(p); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
680 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
681 n = q-p; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
682 if (p[0] == '.' && is_sep(p[1])) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
683 wcscpy(buf, pythonhome); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
684 buf = wcschr(buf, L'\0'); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
685 p++; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
686 n--; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
687 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
688 wcsncpy(buf, p, n); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
689 buf += n; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
690 if (q == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
691 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
692 *buf++ = DELIM; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
693 p = q+1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
694 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
695 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
696 if (argv0_path) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
697 *buf++ = DELIM; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
698 wcscpy(buf, argv0_path); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
699 buf = wcschr(buf, L'\0'); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
700 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
701 *buf = L'\0'; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
702 /* Now to pull one last hack/trick. If sys.prefix is |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
703 empty, then try and find it somewhere on the paths |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
704 we calculated. We scan backwards, as our general policy |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
705 is that Python core directories are at the *end* of |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
706 sys.path. We assume that our "lib" directory is |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
707 on the path, and that our 'prefix' directory is |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
708 the parent of that. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
709 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
710 if (*prefix==L'\0') { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
711 wchar_t lookBuf[MAXPATHLEN+1]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
712 wchar_t *look = buf - 1; /* 'buf' is at the end of the buffer */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
713 while (1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
714 Py_ssize_t nchars; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
715 wchar_t *lookEnd = look; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
716 /* 'look' will end up one character before the |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
717 start of the path in question - even if this |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
718 is one character before the start of the buffer |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
719 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
720 while (look >= module_search_path && *look != DELIM) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
721 look--; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
722 nchars = lookEnd-look; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
723 wcsncpy(lookBuf, look+1, nchars); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
724 lookBuf[nchars] = L'\0'; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
725 /* Up one level to the parent */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
726 reduce(lookBuf); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
727 if (search_for_prefix(lookBuf, LANDMARK)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
728 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
729 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
730 /* If we are out of paths to search - give up */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
731 if (look < module_search_path) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
732 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
733 look--; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
734 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
735 } |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
736 } |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
737 |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
738 |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
739 /* External interface */ |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
740 |
|
64955
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
741 void |
|
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
742 Py_SetPath(const wchar_t *path) |
|
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
743 { |
|
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
744 if (module_search_path != NULL) { |
|
84490
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
745 PyMem_RawFree(module_search_path); |
|
64955
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
746 module_search_path = NULL; |
|
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
747 } |
|
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
748 if (path != NULL) { |
|
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
749 extern wchar_t *Py_GetProgramName(void); |
|
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
750 wchar_t *prog = Py_GetProgramName(); |
|
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
751 wcsncpy(progpath, prog, MAXPATHLEN); |
|
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
752 prefix[0] = L'\0'; |
|
84490
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
753 module_search_path = PyMem_RawMalloc((wcslen(path) + 1) * sizeof(wchar_t)); |
|
64955
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
754 if (module_search_path != NULL) |
|
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
755 wcscpy(module_search_path, path); |
|
84490
18bb92b0c458
Issue #18203: Replace malloc() with PyMem_RawMalloc() at Python initialization
Victor Stinner <victor.stinner@gmail.com>
parents:
84030
diff
changeset
|
756 } |
|
64955
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
757 } |
|
fd5e51035335
issue 9910
Kristján Valur Jónsson <kristjan@ccpgames.com>
parents:
61466
diff
changeset
|
758 |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
759 wchar_t * |
|
13660
a1ce07218781
Miscelaneous ANSIfications. I'm assuming here 'main' should take (int,
Thomas Wouters <thomas@python.org>
parents:
13256
diff
changeset
|
760 Py_GetPath(void) |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
761 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
762 if (!module_search_path) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
763 calculate_path(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
764 return module_search_path; |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
765 } |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
766 |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
767 wchar_t * |
|
13660
a1ce07218781
Miscelaneous ANSIfications. I'm assuming here 'main' should take (int,
Thomas Wouters <thomas@python.org>
parents:
13256
diff
changeset
|
768 Py_GetPrefix(void) |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
769 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
770 if (!module_search_path) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
771 calculate_path(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
772 return prefix; |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
773 } |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
774 |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
775 wchar_t * |
|
13660
a1ce07218781
Miscelaneous ANSIfications. I'm assuming here 'main' should take (int,
Thomas Wouters <thomas@python.org>
parents:
13256
diff
changeset
|
776 Py_GetExecPrefix(void) |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
777 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
778 return Py_GetPrefix(); |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
779 } |
|
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
780 |
|
46318
22a74eaf6b22
Change command line processing API to use wchar_t.
Martin v. Löwis <martin@v.loewis.de>
parents:
41554
diff
changeset
|
781 wchar_t * |
|
13660
a1ce07218781
Miscelaneous ANSIfications. I'm assuming here 'main' should take (int,
Thomas Wouters <thomas@python.org>
parents:
13256
diff
changeset
|
782 Py_GetProgramFullPath(void) |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
783 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
784 if (!module_search_path) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
785 calculate_path(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54650
diff
changeset
|
786 return progpath; |
|
5545
7e4228780ff8
Jim Ahlstrom's contributions for DOS, OS/2, WIN3.1.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
787 } |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
788 |
|
72510
b534b56379cb
Use the new Py_ARRAY_LENGTH macro
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66664
diff
changeset
|
789 /* Load python3.dll before loading any extension module that might refer |
|
b534b56379cb
Use the new Py_ARRAY_LENGTH macro
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66664
diff
changeset
|
790 to it. That way, we can be sure that always the python3.dll corresponding |
|
66664
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
791 to this python DLL is loaded, not a python3.dll that might be on the path |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
792 by chance. |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
793 Return whether the DLL was found. |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
794 */ |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
795 static int python3_checked = 0; |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
796 static HANDLE hPython3; |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
797 int |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
798 _Py_CheckPython3() |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
799 { |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
800 wchar_t py3path[MAXPATHLEN+1]; |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
801 wchar_t *s; |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
802 if (python3_checked) |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
803 return hPython3 != NULL; |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
804 python3_checked = 1; |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
805 |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
806 /* If there is a python3.dll next to the python3y.dll, |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
807 assume this is a build tree; use that DLL */ |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
808 wcscpy(py3path, dllpath); |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
809 s = wcsrchr(py3path, L'\\'); |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
810 if (!s) |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
811 s = py3path; |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
812 wcscpy(s, L"\\python3.dll"); |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
813 hPython3 = LoadLibraryExW(py3path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
814 if (hPython3 != NULL) |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
815 return 1; |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
816 |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
817 /* Check sys.prefix\DLLs\python3.dll */ |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
818 wcscpy(py3path, Py_GetPrefix()); |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
819 wcscat(py3path, L"\\DLLs\\python3.dll"); |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
820 hPython3 = LoadLibraryExW(py3path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
821 return hPython3 != NULL; |
|
62b61abd02b8
Merge branches/pep-0384.
Martin v. Löwis <martin@v.loewis.de>
parents:
64955
diff
changeset
|
822 } |
