79513: kernel32: Reset LastError if GetModuleFileName() succeeds.

buildbot at kegel.com buildbot at kegel.com
Mon Oct 3 17:34:11 CDT 2011


This is an experimental automated build and test service.
Please feel free to ignore this email while we work the kinks out.

For more info about this message, see http://wiki.winehq.org/BuildBot

The Buildbot has detected a failed build on builder runtests-default while building Wine.
Full details are available at: http://buildbot.kegel.com/builders/runtests-default/builds/201 (though maybe not for long, as I'm still reinstalling the buildbot periodically while experimenting)
BUILD FAILED: failed git

Errors:
error: patch failed: dlls/kernel32/module.c:648
error: dlls/kernel32/module.c: patch does not apply
error: patch failed: dlls/kernel32/tests/module.c:44
error: dlls/kernel32/tests/module.c: patch does not apply

-------------- next part --------------
From: Francois Gouget <fgouget at codeweavers.com>
Subject: kernel32: Reset LastError if GetModuleFileName() succeeds.
Message-Id: <alpine.DEB.2.02.1110032337190.27645 at amboise.dolphin>
Date: Mon, 3 Oct 2011 23:38:29 +0200 (CEST)

This is necessary because LastError may already be set to ERROR_INSUFFICIENT_BUFFER which would mislead the caller.
---

Older versions of Windows don't do it (before ~ Windows XP SP3), but 
doing it just makes sense.

 dlls/kernel32/module.c       |    3 +++
 dlls/kernel32/tests/module.c |    8 ++++++++
 2 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/dlls/kernel32/module.c b/dlls/kernel32/module.c
index 8ee0fcd..1b0b23f 100644
--- a/dlls/kernel32/module.c
+++ b/dlls/kernel32/module.c
@@ -648,7 +648,10 @@ DWORD WINAPI GetModuleFileNameW( HMODULE hModule, LPWSTR lpFileName, DWORD size
         len = min(size, pldr->FullDllName.Length / sizeof(WCHAR));
         memcpy(lpFileName, pldr->FullDllName.Buffer, len * sizeof(WCHAR));
         if (len < size)
+        {
             lpFileName[len] = '\0';
+            SetLastError( 0 );
+        }
         else
             SetLastError( ERROR_INSUFFICIENT_BUFFER );
     }
diff --git a/dlls/kernel32/tests/module.c b/dlls/kernel32/tests/module.c
index 01fa448..07d5892 100644
--- a/dlls/kernel32/tests/module.c
+++ b/dlls/kernel32/tests/module.c
@@ -44,13 +44,21 @@ static void testGetModuleFileName(const char* name)
 
     /* first test, with enough space in buffer */
     memset(bufA, '-', sizeof(bufA));
+    SetLastError(0xdeadbeef);
     len1A = GetModuleFileNameA(hMod, bufA, sizeof(bufA));
+    ok(GetLastError() == ERROR_SUCCESS ||
+       broken(GetLastError() == 0xdeadbeef), /* <= XP SP3 */
+       "LastError was not reset: %u\n", GetLastError());
     ok(len1A > 0, "Getting module filename for handle %p\n", hMod);
 
     if (is_unicode_enabled)
     {
         memset(bufW, '-', sizeof(bufW));
+        SetLastError(0xdeadbeef);
         len1W = GetModuleFileNameW(hMod, bufW, sizeof(bufW) / sizeof(WCHAR));
+        ok(GetLastError() == ERROR_SUCCESS ||
+           broken(GetLastError() == 0xdeadbeef), /* <= XP SP3 */
+           "LastError was not reset: %u\n", GetLastError());
         ok(len1W > 0, "Getting module filename for handle %p\n", hMod);
     }
 
-- 
1.7.6.3



More information about the wine-tests-results mailing list