]> granicus.if.org Git - python/commitdiff
Windows-specific hack to make sure that when LoadLibrary() is called,
authorGuido van Rossum <guido@python.org>
Sat, 27 Jun 1998 21:53:17 +0000 (21:53 +0000)
committerGuido van Rossum <guido@python.org>
Sat, 27 Jun 1998 21:53:17 +0000 (21:53 +0000)
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.)

Python/importdl.c

index fe025c083837965d52f3fd703df7a0d1ecfaed64..5d78bab8857856fdd2701601072d0041ee2b060e 100644 (file)
@@ -104,6 +104,7 @@ typedef int (* APIENTRY dl_funcptr)();
 #ifdef MS_WINDOWS /* i.e. MS_WIN32 or MS_WIN16 */
 #define DYNAMIC_LINK
 #include <windows.h>
+#include <direct.h>
 typedef FARPROC dl_funcptr;
 #define _DL_FUNCPTR_DEFINED
 #ifdef _DEBUG
@@ -419,6 +420,19 @@ _PyImport_LoadDynamicModule(name, pathname, fp)
 #ifdef MS_WIN32
        {
                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);
                if (hDLL==NULL){
                        char errBuf[256];
@@ -471,6 +485,14 @@ _PyImport_LoadDynamicModule(name, pathname, fp)
 #ifdef MS_WIN16
        {
                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);
                if (hDLL < HINSTANCE_ERROR){
                        char errBuf[256];