Import Tcl-code 8.6.8
This commit is contained in:
@@ -63,9 +63,10 @@ TclpDlopen(
|
||||
* file. */
|
||||
int flags)
|
||||
{
|
||||
HINSTANCE hInstance;
|
||||
HINSTANCE hInstance = NULL;
|
||||
const TCHAR *nativeName;
|
||||
Tcl_LoadHandle handlePtr;
|
||||
DWORD firstError;
|
||||
|
||||
/*
|
||||
* First try the full path the user gave us. This is particularly
|
||||
@@ -74,7 +75,10 @@ TclpDlopen(
|
||||
*/
|
||||
|
||||
nativeName = Tcl_FSGetNativePath(pathPtr);
|
||||
hInstance = LoadLibraryEx(nativeName,NULL,LOAD_WITH_ALTERED_SEARCH_PATH);
|
||||
if (nativeName != NULL) {
|
||||
hInstance = LoadLibraryEx(nativeName, NULL,
|
||||
LOAD_WITH_ALTERED_SEARCH_PATH);
|
||||
}
|
||||
if (hInstance == NULL) {
|
||||
/*
|
||||
* Let the OS loader examine the binary search path for whatever
|
||||
@@ -84,6 +88,13 @@ TclpDlopen(
|
||||
|
||||
Tcl_DString ds;
|
||||
|
||||
/*
|
||||
* Remember the first error on load attempt to be used if the
|
||||
* second load attempt below also fails.
|
||||
*/
|
||||
firstError = (nativeName == NULL) ?
|
||||
ERROR_MOD_NOT_FOUND : GetLastError();
|
||||
|
||||
nativeName = Tcl_WinUtfToTChar(Tcl_GetString(pathPtr), -1, &ds);
|
||||
hInstance = LoadLibraryEx(nativeName, NULL,
|
||||
LOAD_WITH_ALTERED_SEARCH_PATH);
|
||||
@@ -91,8 +102,21 @@ TclpDlopen(
|
||||
}
|
||||
|
||||
if (hInstance == NULL) {
|
||||
DWORD lastError = GetLastError();
|
||||
Tcl_Obj *errMsg = Tcl_ObjPrintf("couldn't load library \"%s\": ",
|
||||
DWORD lastError;
|
||||
Tcl_Obj *errMsg;
|
||||
|
||||
/*
|
||||
* We choose to only use the error from the second call if the first
|
||||
* call failed due to the file not being found. Else stick to the
|
||||
* first error for reporting purposes.
|
||||
*/
|
||||
if (firstError == ERROR_MOD_NOT_FOUND ||
|
||||
firstError == ERROR_DLL_NOT_FOUND)
|
||||
lastError = GetLastError();
|
||||
else
|
||||
lastError = firstError;
|
||||
|
||||
errMsg = Tcl_ObjPrintf("couldn't load library \"%s\": ",
|
||||
Tcl_GetString(pathPtr));
|
||||
|
||||
/*
|
||||
@@ -129,7 +153,11 @@ TclpDlopen(
|
||||
Tcl_AppendToObj(errMsg, "the library initialization"
|
||||
" routine failed", -1);
|
||||
break;
|
||||
default:
|
||||
case ERROR_BAD_EXE_FORMAT:
|
||||
Tcl_SetErrorCode(interp, "WIN_LOAD", "BAD_EXE_FORMAT", NULL);
|
||||
Tcl_AppendToObj(errMsg, "Bad exe format. Possibly a 32/64-bit mismatch.", -1);
|
||||
break;
|
||||
default:
|
||||
TclWinConvertError(lastError);
|
||||
Tcl_AppendToObj(errMsg, Tcl_PosixError(interp), -1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user