[WIN32K] Workaround for broken/retarded (on non-x86) FLOATOBJ_GetFloat
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Sat, 3 Dec 2022 13:00:28 +0000 (15:00 +0200)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Tue, 13 Dec 2022 06:18:24 +0000 (07:18 +0100)
The official definition in winddi.h always returns the result in an ULONG. This works to assign to a FLOATL on x86, which is also an ULONG, but it doesn't work on any other architecture, where FLOATL is actually a FLOAT, so the assignment would convert the ULONG encoding of the FLOAT to an actual float, which gives broken results. Work around this by simply replacing the definition with a sane one in win32k.

win32ss/pch.h

index 60bdb37..31bf724 100644 (file)
@@ -74,6 +74,12 @@ typedef struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
 /* SEH support with PSEH */
 #include <pseh/pseh2.h>
 
+/* The native x64 definition of FLOATOBJ_GetFloat in winddi.h is retarded. Use this instead. */
+#ifndef _M_IX86
+#undef FLOATOBJ_GetFloat
+#define FLOATOBJ_GetFloat(pf) (*(pf))
+#endif
+
 #ifdef __cplusplus
 extern "C" {
 #endif