Fix MSVC compilation error in user/tests/input

Francois Gouget fgouget at free.fr
Thu Jan 15 14:08:26 CST 2004


In dlls/user/tests/input.c we use the INPUT structure which has an
unnamed union. So we set NONAMELESSUNION (and NONAMELESSSTRUCT for some
reason), so that it will be named (for a broad compiler compatibility).

However the MSVC headers ignore our request and leave it unnamed anyway!
So our code does not compile with MSVC.

Since we use this union in just one place, I have redefined the type in
the test and I have named the struct. This way we know it will compile
whatever happens. Anyone feel free to suggest a better solution.

Changelog:

 * dlls/user/tests/input.c

   The MSVC headers won't give a name to the nameless union of INPUT
despite our request (NONAMELESSUNION). So define our own type and use it
instead.
   Remove useless NONAMELESSSTRUCT.
   Fix signed/unsigned warning.


Index: dlls/user/tests/input.c
===================================================================
RCS file: /home/cvs/wine/dlls/user/tests/input.c,v
retrieving revision 1.2
diff -u -r1.2 input.c
--- dlls/user/tests/input.c	28 Oct 2003 21:45:31 -0000	1.2
+++ dlls/user/tests/input.c	15 Jan 2004 12:05:22 -0000
@@ -44,11 +44,8 @@
  *
  */

-/* for definitions of INPUT */
 #define _WIN32_WINNT 0x401

-#define NONAMELESSUNION
-#define NONAMELESSSTRUCT
 #include "wine/test.h"
 #include "winbase.h"
 #include "winuser.h"
@@ -79,13 +76,25 @@
 /* matching descripts */
 char *getdesc[]={"", "+alt","-alt","+X","-X","+shift","-shift","+ctrl","-ctrl"};

+/* The MSVC headers ignore our NONAMELESSUNION requests so we have to define our own type */
+typedef struct
+{
+    DWORD type;
+    union
+    {
+        MOUSEINPUT      mi;
+        KEYBDINPUT      ki;
+        HARDWAREINPUT   hi;
+    } u;
+} TEST_INPUT;
+
 #define ADDTOINPUTS(kev) \
 inputs[evtctr].type = INPUT_KEYBOARD; \
-    inputs[evtctr].u.ki.wVk = GETVKEY[ kev]; \
-    inputs[evtctr].u.ki.wScan = GETSCAN[ kev]; \
-    inputs[evtctr].u.ki.dwFlags = GETUPDOWN[ kev]; \
-    inputs[evtctr].u.ki.dwExtraInfo = 0; \
-    inputs[evtctr].u.ki.time = ++timetag; \
+    ((TEST_INPUT*)inputs)[evtctr].u.ki.wVk = GETVKEY[ kev]; \
+    ((TEST_INPUT*)inputs)[evtctr].u.ki.wScan = GETSCAN[ kev]; \
+    ((TEST_INPUT*)inputs)[evtctr].u.ki.dwFlags = GETUPDOWN[ kev]; \
+    ((TEST_INPUT*)inputs)[evtctr].u.ki.dwExtraInfo = 0; \
+    ((TEST_INPUT*)inputs)[evtctr].u.ki.time = ++timetag; \
     if( kev) evtctr++;

 typedef struct {
@@ -198,7 +207,8 @@
     KMSG expmsg[MAXKEYEVENTS];
     MSG msg;
     char buf[100];
-    int evtctr=0, kmctr, i;
+    UINT evtctr=0;
+    int kmctr, i;
     buf[0]='\0';
     TrackSysKey=0; /* see input.c */
     for( i = 0; i < MAXKEYEVENTS; i++) {



-- 
Francois Gouget         fgouget at free.fr        http://fgouget.free.fr/
    Indifference will certainly be the downfall of mankind, but who cares?



More information about the wine-patches mailing list