* libltdl/loaders/loadlibrary.c (wm_open): Don't rely on
SetThreadErrorMode (or SetErrorMode) to not clobber the last
error.
Report by Ralf Wildenhues.
Signed-off-by: Peter Rosin <peda@lysator.liu.se>
2010-03-17 Peter Rosin <peda@lysator.liu.se>
+ Preserve the last error when restoring the error mode.
+ * libltdl/loaders/loadlibrary.c (wm_open): Don't rely on
+ SetThreadErrorMode (or SetErrorMode) to not clobber the last
+ error.
+ Report by Ralf Wildenhues.
+
Use Get/SetThreadErrorMode if they are available.
* libltdl/loaders/loadlibrary.c (wrap_geterrormode): Replaced...
(wrap_getthreaderrormode): ...by this function that checks
{
/* Silence dialog from LoadLibrary on some failures. */
DWORD errormode = getthreaderrormode ();
+ DWORD last_error;
+
setthreaderrormode (errormode | SEM_FAILCRITICALERRORS, NULL);
module = LoadLibrary (wpath);
/* Restore the error mode. */
+ last_error = GetLastError ();
setthreaderrormode (errormode, NULL);
+ SetLastError (last_error);
}
/* libltdl expects this function to fail if it is unable