summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Hammond <mhammond@skippinet.com.au>2001-05-09 00:50:59 (GMT)
committerMark Hammond <mhammond@skippinet.com.au>2001-05-09 00:50:59 (GMT)
commitfb1f68ed7cc1536482d1debd70a53c5442135fe2 (patch)
tree3b141fb28542459696ef72614f48a28225480046
parentb4bbcd76ea312f3bb2304671e8b022266175a7ea (diff)
downloadcpython-fb1f68ed7cc1536482d1debd70a53c5442135fe2.zip
cpython-fb1f68ed7cc1536482d1debd70a53c5442135fe2.tar.gz
cpython-fb1f68ed7cc1536482d1debd70a53c5442135fe2.tar.bz2
Always pass a full path name to LoadLibraryEx(). Fixes some Windows 9x problems. As discussed on python-dev
-rw-r--r--Python/dynload_win.c31
1 files changed, 14 insertions, 17 deletions
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index d5f712b..a5a65cf 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -163,24 +163,21 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
#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;