Staging
v0.5.1
v0.5.1
Revision e5c3ae305310a93417cb31b723400e8ec541c4cb authored by Benjamin Peterson on 28 November 2008, 23:04:28 UTC, committed by Benjamin Peterson on 28 November 2008, 23:04:28 UTC
svn+ssh://pythondev@svn.python.org/python/trunk ................ r67428 | benjamin.peterson | 2008-11-28 16:12:14 -0600 (Fri, 28 Nov 2008) | 57 lines Merged revisions 67384,67386-67387,67389-67390,67392,67399-67400,67403-67405,67426 via svnmerge from svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r67384 | benjamin.peterson | 2008-11-25 16:13:31 -0600 (Tue, 25 Nov 2008) | 4 lines don't duplicate calls to start_tree() RefactoringTool.pre_order values now holds a list of the fixers while pre_order_mapping holds the dict. ........ r67386 | benjamin.peterson | 2008-11-25 16:44:52 -0600 (Tue, 25 Nov 2008) | 1 line #4423 fix_imports was still replacing usage of a module if attributes were being used ........ r67387 | benjamin.peterson | 2008-11-25 16:47:54 -0600 (Tue, 25 Nov 2008) | 1 line fix broken test ........ r67389 | benjamin.peterson | 2008-11-25 17:13:17 -0600 (Tue, 25 Nov 2008) | 1 line remove compatibility code; we only cater to 2.5+ ........ r67390 | benjamin.peterson | 2008-11-25 22:03:36 -0600 (Tue, 25 Nov 2008) | 1 line fix #3994; the usage of changed imports was fixed in nested cases ........ r67392 | benjamin.peterson | 2008-11-26 11:11:40 -0600 (Wed, 26 Nov 2008) | 1 line simpilfy and comment fix_imports ........ r67399 | benjamin.peterson | 2008-11-26 11:47:03 -0600 (Wed, 26 Nov 2008) | 1 line remove more compatibility code ........ r67400 | benjamin.peterson | 2008-11-26 12:07:41 -0600 (Wed, 26 Nov 2008) | 1 line set svn:ignore ........ r67403 | benjamin.peterson | 2008-11-26 13:11:11 -0600 (Wed, 26 Nov 2008) | 1 line wrap import ........ r67404 | benjamin.peterson | 2008-11-26 13:29:49 -0600 (Wed, 26 Nov 2008) | 1 line build the fix_imports pattern in compile_pattern, so MAPPING can be changed and reflected in the pattern ........ r67405 | benjamin.peterson | 2008-11-26 14:01:24 -0600 (Wed, 26 Nov 2008) | 1 line stop ugly messages about runtime errors being from printed ........ r67426 | benjamin.peterson | 2008-11-28 16:01:40 -0600 (Fri, 28 Nov 2008) | 5 lines don't replace a module name if it is in the middle of a attribute lookup This fix also stops module names from being replaced if they are not in an attribute lookup. ........ ................
1 parent 6e15860
import_nt.c
/********************************************************************
import_nt.c
Win32 specific import code.
*/
#include "Python.h"
#include "osdefs.h"
#include <windows.h>
#include "importdl.h"
#include "malloc.h" /* for alloca */
/* a string loaded from the DLL at startup */
extern const char *PyWin_DLLVersionString;
FILE *PyWin_FindRegisteredModule(const char *moduleName,
struct filedescr **ppFileDesc,
char *pathBuf,
Py_ssize_t pathLen)
{
char *moduleKey;
const char keyPrefix[] = "Software\\Python\\PythonCore\\";
const char keySuffix[] = "\\Modules\\";
#ifdef _DEBUG
/* In debugging builds, we _must_ have the debug version
* registered.
*/
const char debugString[] = "\\Debug";
#else
const char debugString[] = "";
#endif
struct filedescr *fdp = NULL;
FILE *fp;
HKEY keyBase = HKEY_CURRENT_USER;
int modNameSize;
long regStat;
/* Calculate the size for the sprintf buffer.
* Get the size of the chars only, plus 1 NULL.
*/
size_t bufSize = sizeof(keyPrefix)-1 +
strlen(PyWin_DLLVersionString) +
sizeof(keySuffix) +
strlen(moduleName) +
sizeof(debugString) - 1;
/* alloca == no free required, but memory only local to fn,
* also no heap fragmentation!
*/
moduleKey = alloca(bufSize);
PyOS_snprintf(moduleKey, bufSize,
"Software\\Python\\PythonCore\\%s\\Modules\\%s%s",
PyWin_DLLVersionString, moduleName, debugString);
assert(pathLen < INT_MAX);
modNameSize = (int)pathLen;
regStat = RegQueryValue(keyBase, moduleKey, pathBuf, &modNameSize);
if (regStat != ERROR_SUCCESS) {
/* No user setting - lookup in machine settings */
keyBase = HKEY_LOCAL_MACHINE;
/* be anal - failure may have reset size param */
modNameSize = (int)pathLen;
regStat = RegQueryValue(keyBase, moduleKey,
pathBuf, &modNameSize);
if (regStat != ERROR_SUCCESS)
return NULL;
}
/* use the file extension to locate the type entry. */
for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) {
size_t extLen = strlen(fdp->suffix);
assert(modNameSize >= 0); /* else cast to size_t is wrong */
if ((size_t)modNameSize > extLen &&
strnicmp(pathBuf + ((size_t)modNameSize-extLen-1),
fdp->suffix,
extLen) == 0)
break;
}
if (fdp->suffix == NULL)
return NULL;
fp = fopen(pathBuf, fdp->mode);
if (fp != NULL)
*ppFileDesc = fdp;
return fp;
}
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...