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