summaryrefslogtreecommitdiffstats
path: root/Python/dynload_win.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2011-04-04 21:05:53 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2011-04-04 21:05:53 (GMT)
commit2d3222740bd119df048b955facd30eb48953b05f (patch)
tree440e417c56ae42fac26a81f4a38828b0a92168b3 /Python/dynload_win.c
parent54e7135fe81369a06e4c0dc496d423ed69dffc83 (diff)
downloadcpython-2d3222740bd119df048b955facd30eb48953b05f.zip
cpython-2d3222740bd119df048b955facd30eb48953b05f.tar.gz
cpython-2d3222740bd119df048b955facd30eb48953b05f.tar.bz2
Issue #11619: _PyImport_LoadDynamicModule() doesn't encode the path to bytes
on Windows.
Diffstat (limited to 'Python/dynload_win.c')
-rw-r--r--Python/dynload_win.c33
1 files changed, 16 insertions, 17 deletions
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index 9c04250..9869f6a 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -171,8 +171,8 @@ static char *GetPythonImport (HINSTANCE hModule)
return NULL;
}
-dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname,
- const char *pathname, FILE *fp)
+dl_funcptr _PyImport_GetDynLoadWindows(const char *shortname,
+ PyObject *pathname, FILE *fp)
{
dl_funcptr p;
char funcname[258], *import_python;
@@ -185,8 +185,7 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname,
{
HINSTANCE hDLL = NULL;
- char pathbuf[260];
- LPTSTR dummy;
+ wchar_t pathbuf[260];
unsigned int old_mode;
ULONG_PTR cookie = 0;
/* We use LoadLibraryEx so Windows looks for dependent DLLs
@@ -198,14 +197,14 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname,
/* Don't display a message box when Python can't load a DLL */
old_mode = SetErrorMode(SEM_FAILCRITICALERRORS);
- if (GetFullPathName(pathname,
- sizeof(pathbuf),
- pathbuf,
- &dummy)) {
+ if (GetFullPathNameW(PyUnicode_AS_UNICODE(pathname),
+ sizeof(pathbuf) / sizeof(pathbuf[0]),
+ pathbuf,
+ NULL)) {
ULONG_PTR cookie = _Py_ActivateActCtx();
/* XXX This call doesn't exist in Windows CE */
- hDLL = LoadLibraryEx(pathname, NULL,
- LOAD_WITH_ALTERED_SEARCH_PATH);
+ hDLL = LoadLibraryExW(PyUnicode_AS_UNICODE(pathname), NULL,
+ LOAD_WITH_ALTERED_SEARCH_PATH);
_Py_DeactivateActCtx(cookie);
}
@@ -264,21 +263,21 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname,
} else {
char buffer[256];
+ PyOS_snprintf(buffer, sizeof(buffer),
#ifdef _DEBUG
- PyOS_snprintf(buffer, sizeof(buffer), "python%d%d_d.dll",
+ "python%d%d_d.dll",
#else
- PyOS_snprintf(buffer, sizeof(buffer), "python%d%d.dll",
+ "python%d%d.dll",
#endif
PY_MAJOR_VERSION,PY_MINOR_VERSION);
import_python = GetPythonImport(hDLL);
if (import_python &&
strcasecmp(buffer,import_python)) {
- PyOS_snprintf(buffer, sizeof(buffer),
- "Module use of %.150s conflicts "
- "with this version of Python.",
- import_python);
- PyErr_SetString(PyExc_ImportError,buffer);
+ PyErr_Format(PyExc_ImportError,
+ "Module use of %.150s conflicts "
+ "with this version of Python.",
+ import_python);
FreeLibrary(hDLL);
return NULL;
}