[PATCH] user32: Avoid touching last error on successful path of GetClassInfo()

Nikolay Sivov nsivov at codeweavers.com
Mon May 7 05:20:45 CDT 2018


Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---

Should help with https://bugs.winehq.org/show_bug.cgi?id=44563

 dlls/user32/class.c       | 5 ++++-
 dlls/user32/tests/class.c | 1 +
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/dlls/user32/class.c b/dlls/user32/class.c
index d4e7951d39..ce2830fe25 100644
--- a/dlls/user32/class.c
+++ b/dlls/user32/class.c
@@ -333,6 +333,7 @@ const WCHAR *CLASS_GetVersionedName( const WCHAR *name, UINT *basename_offset, B
         ULONG module_offset;
     } *wndclass;
     const WCHAR *module, *ret;
+    UNICODE_STRING name_us;
     HMODULE hmod;
 
     if (basename_offset)
@@ -345,7 +346,9 @@ const WCHAR *CLASS_GetVersionedName( const WCHAR *name, UINT *basename_offset, B
         return name;
 
     data.cbSize = sizeof(data);
-    if (!FindActCtxSectionStringW(0, NULL, ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION, name, &data))
+    RtlInitUnicodeString(&name_us, name);
+    if (RtlFindActivationContextSectionString(0, NULL, ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION,
+            &name_us, &data))
         return name;
 
     wndclass = (struct wndclass_redirect_data *)data.lpData;
diff --git a/dlls/user32/tests/class.c b/dlls/user32/tests/class.c
index a9eee4109c..92b9ad93a2 100644
--- a/dlls/user32/tests/class.c
+++ b/dlls/user32/tests/class.c
@@ -998,6 +998,7 @@ if (0) { /* crashes under XP */
     SetLastError(0xdeadbeef);
     ret = GetClassInfoExA(0, "static", &wcx);
     ok(ret, "GetClassInfoExA() error %d\n", GetLastError());
+    ok(GetLastError() == 0xdeadbeef, "Unexpected error code %d\n", GetLastError());
     ok(wcx.cbSize == 0, "expected 0, got %u\n", wcx.cbSize);
     ok(wcx.lpfnWndProc != NULL, "got null proc\n");
 
-- 
2.17.0




More information about the wine-devel mailing list