]> git.ipfire.org Git - thirdparty/libtool.git/commitdiff
Preserve the last error when restoring the error mode.
authorPeter Rosin <peda@lysator.liu.se>
Wed, 17 Mar 2010 08:01:57 +0000 (09:01 +0100)
committerPeter Rosin <peda@lysator.liu.se>
Wed, 17 Mar 2010 08:01:57 +0000 (09:01 +0100)
* 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>
ChangeLog
libltdl/loaders/loadlibrary.c

index 3aed4000974918943356d6b69d9f61bb6c9dd53a..5c36a742ba245442e24f38099ba5b8879d61ef14 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 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
index 620e7cf4250472b29ac3625318536830cb9d27c3..179c00980d04d9c1e5f0e699fba062dad98adb64 100644 (file)
@@ -192,12 +192,16 @@ vm_open (lt_user_data LT__UNUSED loader_data, const char *filename,
   {
     /* 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