[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