Dmitry Timoshkov : kernel32: Make GetModuleFileName set ERROR_INSUFFICIENT_BUFFER like win2k3 and vista do .
Alexandre Julliard
julliard at winehq.org
Wed Jun 18 12:55:42 CDT 2008
Module: wine
Branch: master
Commit: 2a98f9b0b0cbefbe360098417e4391c7a2c6eabd
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2a98f9b0b0cbefbe360098417e4391c7a2c6eabd
Author: Dmitry Timoshkov <dmitry at codeweavers.com>
Date: Wed Jun 18 12:35:03 2008 +0900
kernel32: Make GetModuleFileName set ERROR_INSUFFICIENT_BUFFER like win2k3 and vista do.
---
dlls/kernel32/module.c | 10 ++++++++--
dlls/user32/tests/win.c | 17 ++++++++---------
2 files changed, 16 insertions(+), 11 deletions(-)
diff --git a/dlls/kernel32/module.c b/dlls/kernel32/module.c
index e233c85..86675b6 100644
--- a/dlls/kernel32/module.c
+++ b/dlls/kernel32/module.c
@@ -608,7 +608,10 @@ DWORD WINAPI GetModuleFileNameA(
if ((len = GetModuleFileNameW( hModule, filenameW, size )))
{
len = FILE_name_WtoA( filenameW, len, lpFileName, size );
- if (len < size) lpFileName[len] = '\0';
+ if (len < size)
+ lpFileName[len] = '\0';
+ else
+ SetLastError( ERROR_INSUFFICIENT_BUFFER );
}
HeapFree( GetProcessHeap(), 0, filenameW );
return len;
@@ -642,7 +645,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';
+ if (len < size)
+ lpFileName[len] = '\0';
+ else
+ SetLastError( ERROR_INSUFFICIENT_BUFFER );
}
else SetLastError( RtlNtStatusToDosError( nts ) );
diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index e8368d6..68d5530 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -4657,33 +4657,32 @@ static void test_GetWindowModuleFileName(void)
hinst = GetModuleHandle(0);
- /* MSDN mentions ERROR_INSUFFICIENT_BUFFER, but XP doesn't do it */
SetLastError(0xdeadbeef);
ret2 = GetModuleFileName(hinst, buf2, ret1 - 2);
ok(ret2 == ret1 - 2, "expected %u, got %u\n", ret1 - 2, ret2);
- ok(GetLastError() == 0xdeadbeef ||
- GetLastError() == ERROR_INSUFFICIENT_BUFFER, /* win2k3 */
+ ok(GetLastError() == 0xdeadbeef /* XP */ ||
+ GetLastError() == ERROR_INSUFFICIENT_BUFFER, /* win2k3, vista */
"expected 0xdeadbeef or ERROR_INSUFFICIENT_BUFFER, got %u\n", GetLastError());
SetLastError(0xdeadbeef);
ret2 = GetModuleFileName(hinst, buf2, 0);
ok(!ret2, "GetModuleFileName should return 0\n");
- ok(GetLastError() == 0xdeadbeef ||
- GetLastError() == ERROR_INSUFFICIENT_BUFFER, /* win2k3 */
+ ok(GetLastError() == 0xdeadbeef /* XP */ ||
+ GetLastError() == ERROR_INSUFFICIENT_BUFFER, /* win2k3, vista */
"expected 0xdeadbeef or ERROR_INSUFFICIENT_BUFFER, got %u\n", GetLastError());
SetLastError(0xdeadbeef);
ret2 = pGetWindowModuleFileNameA(hwnd, buf2, ret1 - 2);
ok(ret2 == ret1 - 2, "expected %u, got %u\n", ret1 - 2, ret2);
- ok(GetLastError() == 0xdeadbeef ||
- GetLastError() == ERROR_INSUFFICIENT_BUFFER, /* win2k3 */
+ ok(GetLastError() == 0xdeadbeef /* XP */ ||
+ GetLastError() == ERROR_INSUFFICIENT_BUFFER, /* win2k3, vista */
"expected 0xdeadbeef or ERROR_INSUFFICIENT_BUFFER, got %u\n", GetLastError());
SetLastError(0xdeadbeef);
ret2 = pGetWindowModuleFileNameA(hwnd, buf2, 0);
ok(!ret2, "expected 0, got %u\n", ret2);
- ok(GetLastError() == 0xdeadbeef ||
- GetLastError() == ERROR_INSUFFICIENT_BUFFER, /* win2k3 */
+ ok(GetLastError() == 0xdeadbeef /* XP */ ||
+ GetLastError() == ERROR_INSUFFICIENT_BUFFER, /* win2k3, vista */
"expected 0xdeadbeef or ERROR_INSUFFICIENT_BUFFER, got %u\n", GetLastError());
DestroyWindow(hwnd);
More information about the wine-cvs
mailing list