mirror of
https://github.com/python/cpython.git
synced 2025-10-15 11:22:18 +00:00
Windows-specific hack to make sure that when LoadLibrary() is called,
the filename contains at least a rudimentary pathname. (The bad part is that we need to call getcwd() because only a prefix of ".\\" is not enough -- we prefix the drive letter.)
This commit is contained in:
parent
0ef577b966
commit
a5e1b008a9
1 changed files with 22 additions and 0 deletions
|
@ -104,6 +104,7 @@ typedef int (* APIENTRY dl_funcptr)();
|
||||||
#ifdef MS_WINDOWS /* i.e. MS_WIN32 or MS_WIN16 */
|
#ifdef MS_WINDOWS /* i.e. MS_WIN32 or MS_WIN16 */
|
||||||
#define DYNAMIC_LINK
|
#define DYNAMIC_LINK
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <direct.h>
|
||||||
typedef FARPROC dl_funcptr;
|
typedef FARPROC dl_funcptr;
|
||||||
#define _DL_FUNCPTR_DEFINED
|
#define _DL_FUNCPTR_DEFINED
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
@ -419,6 +420,19 @@ _PyImport_LoadDynamicModule(name, pathname, fp)
|
||||||
#ifdef MS_WIN32
|
#ifdef MS_WIN32
|
||||||
{
|
{
|
||||||
HINSTANCE hDLL;
|
HINSTANCE hDLL;
|
||||||
|
char pathbuf[260];
|
||||||
|
if (strchr(pathname, SEP) == NULL &&
|
||||||
|
strchr(pathname, ALTSEP) == NULL)
|
||||||
|
{
|
||||||
|
/* Prefix bare filename with ".\" */
|
||||||
|
char *p = pathbuf;
|
||||||
|
*p = '\0';
|
||||||
|
_getcwd(pathbuf, sizeof pathbuf);
|
||||||
|
if (*p != '\0' && p[1] == ':')
|
||||||
|
p += 2;
|
||||||
|
sprintf(p, ".\\%-.255s", pathname);
|
||||||
|
pathname = pathbuf;
|
||||||
|
}
|
||||||
hDLL = LoadLibrary(pathname);
|
hDLL = LoadLibrary(pathname);
|
||||||
if (hDLL==NULL){
|
if (hDLL==NULL){
|
||||||
char errBuf[256];
|
char errBuf[256];
|
||||||
|
@ -471,6 +485,14 @@ _PyImport_LoadDynamicModule(name, pathname, fp)
|
||||||
#ifdef MS_WIN16
|
#ifdef MS_WIN16
|
||||||
{
|
{
|
||||||
HINSTANCE hDLL;
|
HINSTANCE hDLL;
|
||||||
|
char pathbuf[16];
|
||||||
|
if (strchr(pathname, SEP) == NULL &&
|
||||||
|
strchr(pathname, ALTSEP) == NULL)
|
||||||
|
{
|
||||||
|
/* Prefix bare filename with ".\" */
|
||||||
|
sprintf(pathbuf, ".\\%-.13s", pathname);
|
||||||
|
pathname = pathbuf;
|
||||||
|
}
|
||||||
hDLL = LoadLibrary(pathname);
|
hDLL = LoadLibrary(pathname);
|
||||||
if (hDLL < HINSTANCE_ERROR){
|
if (hDLL < HINSTANCE_ERROR){
|
||||||
char errBuf[256];
|
char errBuf[256];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue