Owen Rudge : user32: Return Unicode length instead of ANSI in GetUserObjectInformationA.
Alexandre Julliard
julliard at winehq.org
Mon May 14 14:26:05 CDT 2012
Module: wine
Branch: master
Commit: fecde1ead8260ddb89b74c00b367721cccd76173
URL: http://source.winehq.org/git/wine.git/?a=commit;h=fecde1ead8260ddb89b74c00b367721cccd76173
Author: Owen Rudge <owen at owenrudge.net>
Date: Mon May 14 15:25:03 2012 +0100
user32: Return Unicode length instead of ANSI in GetUserObjectInformationA.
---
dlls/user32/tests/winstation.c | 4 ++--
dlls/user32/winstation.c | 8 ++++++--
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/dlls/user32/tests/winstation.c b/dlls/user32/tests/winstation.c
index bd042f2..23a4311 100644
--- a/dlls/user32/tests/winstation.c
+++ b/dlls/user32/tests/winstation.c
@@ -397,7 +397,7 @@ static void test_getuserobjectinformation(void)
ok(!ret, "GetUserObjectInformationA returned %x", ret);
ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "LastError is set to %08x\n", GetLastError());
- todo_wine ok(size == 22, "size is set to %d\n", size); /* Windows returns Unicode length (11*2) */
+ ok(size == 22, "size is set to %d\n", size); /* Windows returns Unicode length (11*2) */
/* Get string */
SetLastError(0xdeadbeef);
@@ -439,7 +439,7 @@ static void test_getuserobjectinformation(void)
ok(!ret, "GetUserObjectInformationA returned %x", ret);
ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "LastError is set to %08x\n", GetLastError());
- todo_wine ok(size == 16, "size is set to %d\n", size); /* Windows returns Unicode length (8*2) */
+ ok(size == 16, "size is set to %d\n", size); /* Windows returns Unicode length (8*2) */
/* Get string */
SetLastError(0xdeadbeef);
diff --git a/dlls/user32/winstation.c b/dlls/user32/winstation.c
index 770245d..96b51179 100644
--- a/dlls/user32/winstation.c
+++ b/dlls/user32/winstation.c
@@ -477,13 +477,17 @@ BOOL WINAPI GetUserObjectInformationA( HANDLE handle, INT index, LPVOID info, DW
if (index == UOI_TYPE || index == UOI_NAME)
{
WCHAR buffer[MAX_PATH];
- DWORD lenA;
+ DWORD lenA, lenW;
- if (!GetUserObjectInformationW( handle, index, buffer, sizeof(buffer), NULL )) return FALSE;
+ if (!GetUserObjectInformationW( handle, index, buffer, sizeof(buffer), &lenW )) return FALSE;
lenA = WideCharToMultiByte( CP_ACP, 0, buffer, -1, NULL, 0, NULL, NULL );
if (needed) *needed = lenA;
if (lenA > len)
{
+ /* If the buffer length supplied by the caller is insufficient, Windows returns a
+ 'needed' length based upon the Unicode byte length, so we should do similarly. */
+ if (needed) *needed = lenW;
+
SetLastError( ERROR_INSUFFICIENT_BUFFER );
return FALSE;
}
More information about the wine-cvs
mailing list