From 8e67930bd7a1db8438cca50e8bd9269d80887c84 Mon Sep 17 00:00:00 2001 From: Francois Gouget Date: Mon, 3 Oct 2011 23:38:29 +0200 Subject: [PATCH] kernel32: Reset LastError if GetModuleFileName() succeeds. --- dlls/kernel32/module.c | 3 +++ dlls/kernel32/tests/module.c | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/dlls/kernel32/module.c b/dlls/kernel32/module.c index 8ee0fcd97ff..1b0b23f58af 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 01fa448a333..07d58921e6b 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); } -- 2.11.4.GIT