[Python-Dev] Importing extensions on Windows 95
Mark Hammond
MarkH@ActiveState.com
Tue, 1 May 2001 10:42:19 +1000
> Here's a stab at a patch. Could you review it and test it ? I
> don't have enough knowledge of win32 for this...
I think we can drop the getcwd call here completely.
I prefer the patch below.
Mark.
Index: dynload_win.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/dynload_win.c,v
retrieving revision 2.7
diff -u -r2.7 dynload_win.c
--- dynload_win.c 2000/10/05 10:54:45 2.7
+++ dynload_win.c 2001/05/01 00:36:40
@@ -163,24 +163,21 @@
#ifdef MS_WIN32
{
- HINSTANCE hDLL;
+ HINSTANCE hDLL = NULL;
char pathbuf[260];
- if (strchr(pathname, '\\') == NULL &&
- strchr(pathname, '/') == 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;
- }
- /* Look for dependent DLLs in directory of pathname first */
- /* XXX This call doesn't exist in Windows CE */
- hDLL = LoadLibraryEx(pathname, NULL,
- LOAD_WITH_ALTERED_SEARCH_PATH);
+ LPTSTR dummy;
+ /* We use LoadLibraryEx so Windows looks for dependent DLLs
+ in directory of pathname first. However, Windows95
+ can sometimes not work correctly unless the absolute
+ path is used. If GetFullPathName() fails, the LoadLibrary
+ will certainly fail too, so use its error code */
+ if (GetFullPathName(pathname,
+ sizeof(pathbuf),
+ pathbuf,
+ &dummy))
+ /* XXX This call doesn't exist in Windows CE */
+ hDLL = LoadLibraryEx(pathname, NULL,
+ LOAD_WITH_ALTERED_SEARCH_PATH);
if (hDLL==NULL){
char errBuf[256];
unsigned int errorCode;