Module: wine Branch: master Commit: fecde1ead8260ddb89b74c00b367721cccd76173 URL: http://source.winehq.org/git/wine.git/?a=commit;h=fecde1ead8260ddb89b74c00b3...
Author: Owen Rudge owen@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; }