[1/3] kernel32: Reset LastError if GetModuleFileName() succeeds.

Francois Gouget fgouget at codeweavers.com
Thu Sep 29 19:16:55 CDT 2011


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

See the corresponding conformance test.

 dlls/kernel32/module.c       |    3 +++
 dlls/kernel32/tests/module.c |    4 ++++
 2 files changed, 7 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..30da91e 100644
--- a/dlls/kernel32/tests/module.c
+++ b/dlls/kernel32/tests/module.c
@@ -43,15 +43,19 @@ static void testGetModuleFileName(const char* name)
     hMod = (name) ? GetModuleHandle(name) : NULL;
 
     /* first test, with enough space in buffer */
+    SetLastError(0xdeadbeef);
     memset(bufA, '-', sizeof(bufA));
     len1A = GetModuleFileNameA(hMod, bufA, sizeof(bufA));
     ok(len1A > 0, "Getting module filename for handle %p\n", hMod);
+    ok(GetLastError() == ERROR_SUCCESS, "LastError was not reset: %d\n", GetLastError());
 
     if (is_unicode_enabled)
     {
+        SetLastError(0xdeadbeef);
         memset(bufW, '-', sizeof(bufW));
         len1W = GetModuleFileNameW(hMod, bufW, sizeof(bufW) / sizeof(WCHAR));
         ok(len1W > 0, "Getting module filename for handle %p\n", hMod);
+        ok(GetLastError() == ERROR_SUCCESS, "LastError was not reset: %d\n", GetLastError());
     }
 
     ok(len1A == strlen(bufA), "Unexpected length of GetModuleFilenameA (%d/%d)\n", len1A, lstrlenA(bufA));
-- 
1.7.6.3




More information about the wine-patches mailing list