annotate PC/import_nt.c @ 54294:dba767bc3155 legacy-trunk

remove mention of old ctypes version
author Benjamin Peterson <benjamin@python.org>
date Sat, 23 May 2009 20:59:09 +0000
parents 7fdc639bc5b4
children fd25030223b0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4087
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 /********************************************************************
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
4105
9c1f9b09c442 More changes for NT, Guido style
Guido van Rossum <guido@python.org>
parents: 4087
diff changeset
3 import_nt.c
4087
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 Win32 specific import code.
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
7 */
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
8
5406
c2254754192c Include Python.h, not allobjects.h (which no longer exists).
Guido van Rossum <guido@python.org>
parents: 4127
diff changeset
9 #include "Python.h"
4087
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 #include "osdefs.h"
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 #include <windows.h>
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
12 #include "importdl.h"
13332
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
13 #include "malloc.h" /* for alloca */
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
14
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
15 /* a string loaded from the DLL at startup */
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
16 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: 5998
diff changeset
17
13332
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
18 FILE *PyWin_FindRegisteredModule(const char *moduleName,
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
19 struct filedescr **ppFileDesc,
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
20 char *pathBuf,
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 21084
diff changeset
21 Py_ssize_t pathLen)
4087
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
22 {
6356
a857d2f87336 Seem to be some changes related to DLL version from string resource,
Guido van Rossum <guido@python.org>
parents: 5998
diff changeset
23 char *moduleKey;
a857d2f87336 Seem to be some changes related to DLL version from string resource,
Guido van Rossum <guido@python.org>
parents: 5998
diff changeset
24 const char keyPrefix[] = "Software\\Python\\PythonCore\\";
a857d2f87336 Seem to be some changes related to DLL version from string resource,
Guido van Rossum <guido@python.org>
parents: 5998
diff changeset
25 const char keySuffix[] = "\\Modules\\";
8421
d96cbdacbe72 Mark Hammond writes:
Guido van Rossum <guido@python.org>
parents: 6356
diff changeset
26 #ifdef _DEBUG
13332
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
27 /* In debugging builds, we _must_ have the debug version
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
28 * registered.
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
29 */
8421
d96cbdacbe72 Mark Hammond writes:
Guido van Rossum <guido@python.org>
parents: 6356
diff changeset
30 const char debugString[] = "\\Debug";
d96cbdacbe72 Mark Hammond writes:
Guido van Rossum <guido@python.org>
parents: 6356
diff changeset
31 #else
d96cbdacbe72 Mark Hammond writes:
Guido van Rossum <guido@python.org>
parents: 6356
diff changeset
32 const char debugString[] = "";
d96cbdacbe72 Mark Hammond writes:
Guido van Rossum <guido@python.org>
parents: 6356
diff changeset
33 #endif
4087
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 struct filedescr *fdp = NULL;
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 FILE *fp;
14119
f6338d74dca1 Registered modules could only exist in HKEY_LOCAL_MACHINE - now HKEY_CURRENT_USER can override.
Mark Hammond <mhammond@skippinet.com.au>
parents: 13332
diff changeset
36 HKEY keyBase = HKEY_CURRENT_USER;
8421
d96cbdacbe72 Mark Hammond writes:
Guido van Rossum <guido@python.org>
parents: 6356
diff changeset
37 int modNameSize;
8509
8e820716cf12 Subject: Bug in PC/import_nt.c
Guido van Rossum <guido@python.org>
parents: 8421
diff changeset
38 long regStat;
6356
a857d2f87336 Seem to be some changes related to DLL version from string resource,
Guido van Rossum <guido@python.org>
parents: 5998
diff changeset
39
13332
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
40 /* Calculate the size for the sprintf buffer.
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
41 * Get the size of the chars only, plus 1 NULL.
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
42 */
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
43 size_t bufSize = sizeof(keyPrefix)-1 +
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
44 strlen(PyWin_DLLVersionString) +
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
45 sizeof(keySuffix) +
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
46 strlen(moduleName) +
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
47 sizeof(debugString) - 1;
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
48 /* alloca == no free required, but memory only local to fn,
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
49 * also no heap fragmentation!
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
50 */
8421
d96cbdacbe72 Mark Hammond writes:
Guido van Rossum <guido@python.org>
parents: 6356
diff changeset
51 moduleKey = alloca(bufSize);
21084
52ce887db3c9 PyWin_FindRegisteredModule(): Conversion of sprintf() to
Barry Warsaw <barry@python.org>
parents: 18607
diff changeset
52 PyOS_snprintf(moduleKey, bufSize,
52ce887db3c9 PyWin_FindRegisteredModule(): Conversion of sprintf() to
Barry Warsaw <barry@python.org>
parents: 18607
diff changeset
53 "Software\\Python\\PythonCore\\%s\\Modules\\%s%s",
52ce887db3c9 PyWin_FindRegisteredModule(): Conversion of sprintf() to
Barry Warsaw <barry@python.org>
parents: 18607
diff changeset
54 PyWin_DLLVersionString, moduleName, debugString);
6356
a857d2f87336 Seem to be some changes related to DLL version from string resource,
Guido van Rossum <guido@python.org>
parents: 5998
diff changeset
55
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 21084
diff changeset
56 assert(pathLen < INT_MAX);
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 21084
diff changeset
57 modNameSize = (int)pathLen;
8509
8e820716cf12 Subject: Bug in PC/import_nt.c
Guido van Rossum <guido@python.org>
parents: 8421
diff changeset
58 regStat = RegQueryValue(keyBase, moduleKey, pathBuf, &modNameSize);
14119
f6338d74dca1 Registered modules could only exist in HKEY_LOCAL_MACHINE - now HKEY_CURRENT_USER can override.
Mark Hammond <mhammond@skippinet.com.au>
parents: 13332
diff changeset
59 if (regStat != ERROR_SUCCESS) {
f6338d74dca1 Registered modules could only exist in HKEY_LOCAL_MACHINE - now HKEY_CURRENT_USER can override.
Mark Hammond <mhammond@skippinet.com.au>
parents: 13332
diff changeset
60 /* No user setting - lookup in machine settings */
f6338d74dca1 Registered modules could only exist in HKEY_LOCAL_MACHINE - now HKEY_CURRENT_USER can override.
Mark Hammond <mhammond@skippinet.com.au>
parents: 13332
diff changeset
61 keyBase = HKEY_LOCAL_MACHINE;
f6338d74dca1 Registered modules could only exist in HKEY_LOCAL_MACHINE - now HKEY_CURRENT_USER can override.
Mark Hammond <mhammond@skippinet.com.au>
parents: 13332
diff changeset
62 /* be anal - failure may have reset size param */
36501
7fdc639bc5b4 Merge ssize_t branch.
Martin v. Löwis <martin@v.loewis.de>
parents: 21084
diff changeset
63 modNameSize = (int)pathLen;
14119
f6338d74dca1 Registered modules could only exist in HKEY_LOCAL_MACHINE - now HKEY_CURRENT_USER can override.
Mark Hammond <mhammond@skippinet.com.au>
parents: 13332
diff changeset
64 regStat = RegQueryValue(keyBase, moduleKey,
f6338d74dca1 Registered modules could only exist in HKEY_LOCAL_MACHINE - now HKEY_CURRENT_USER can override.
Mark Hammond <mhammond@skippinet.com.au>
parents: 13332
diff changeset
65 pathBuf, &modNameSize);
f6338d74dca1 Registered modules could only exist in HKEY_LOCAL_MACHINE - now HKEY_CURRENT_USER can override.
Mark Hammond <mhammond@skippinet.com.au>
parents: 13332
diff changeset
66
f6338d74dca1 Registered modules could only exist in HKEY_LOCAL_MACHINE - now HKEY_CURRENT_USER can override.
Mark Hammond <mhammond@skippinet.com.au>
parents: 13332
diff changeset
67 if (regStat != ERROR_SUCCESS)
f6338d74dca1 Registered modules could only exist in HKEY_LOCAL_MACHINE - now HKEY_CURRENT_USER can override.
Mark Hammond <mhammond@skippinet.com.au>
parents: 13332
diff changeset
68 return NULL;
f6338d74dca1 Registered modules could only exist in HKEY_LOCAL_MACHINE - now HKEY_CURRENT_USER can override.
Mark Hammond <mhammond@skippinet.com.au>
parents: 13332
diff changeset
69 }
13332
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
70 /* use the file extension to locate the type entry. */
5450
4a80e6ca7cd3 forgot to rename import_filetab
Guido van Rossum <guido@python.org>
parents: 5406
diff changeset
71 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
13101
3cea73a2bbd8 Trent Mick: familiar simple Win64 patches
Guido van Rossum <guido@python.org>
parents: 12239
diff changeset
72 size_t extLen = strlen(fdp->suffix);
13332
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
73 assert(modNameSize >= 0); /* else cast to size_t is wrong */
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
74 if ((size_t)modNameSize > extLen &&
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
75 strnicmp(pathBuf + ((size_t)modNameSize-extLen-1),
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
76 fdp->suffix,
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
77 extLen) == 0)
4087
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
78 break;
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 }
13332
5626d4255fce Squash signed-vs-unsigned warning. Also edits to bring into line
Tim Peters <tim.peters@gmail.com>
parents: 13101
diff changeset
80 if (fdp->suffix == NULL)
4087
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 return NULL;
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
82 fp = fopen(pathBuf, fdp->mode);
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 if (fp != NULL)
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
84 *ppFileDesc = fdp;
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 return fp;
740def697d8b NT specific files supplied by Mark Hammond
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 }