PATCH: kernel new compiler

Marcus Meissner marcus at jet.franken.de
Fri Jul 16 08:17:44 CDT 2004


Hi,

This is by far the largest patch of the new compiler fixes.

I have reviewed it line by line several times, but have not found
a testcase in short notice, so it might not be correct.

Ciao, Marcus

Changelog:
	Converted the 32->16 converter functions to use 
	constructs which work with the new gcc.

Index: dlls/kernel/resource16.c
===================================================================
RCS file: /home/wine/wine/dlls/kernel/resource16.c,v
retrieving revision 1.6
diff -u -r1.6 resource16.c
--- dlls/kernel/resource16.c	27 Nov 2003 00:59:36 -0000	1.6
+++ dlls/kernel/resource16.c	16 Jul 2004 13:15:25 -0000
@@ -409,74 +409,133 @@
     return prevHandler;
 }
 
+static DWORD __get_DWORD(LPBYTE *p) {
+	DWORD __tmp = *(DWORD*)*p;
+
+	*p += sizeof(DWORD);
+	return __tmp;
+}
+
+static DWORD __put_DWORD(LPBYTE *p, DWORD d) {
+	*(DWORD*)*p = d;
+	*p += sizeof(DWORD);
+	return d;
+}
+
+static DWORD __copy_DWORD(LPBYTE *dialog16, LPBYTE *p) {
+	DWORD __tmp = *(DWORD*)*p;;
+
+	*(DWORD*)*dialog16 = __tmp;
+	*p 		+= sizeof(DWORD);
+	*dialog16 	+= sizeof(DWORD);
+	return __tmp;
+}
+
+#define COPY_DWORD __copy_DWORD(&dialog16,&p)
+
+static WORD __copy_WORD(LPBYTE *dialog16, LPBYTE *p) {
+	WORD __tmp = *(WORD*)*p;;
+
+	*(WORD*)*dialog16 = __tmp;
+	*p 		+= sizeof(WORD);
+	*dialog16 	+= sizeof(WORD);
+	return __tmp;
+}
+
+#define COPY_WORD __copy_WORD(&dialog16,&p)
+
+static WORD __get_WORD(LPBYTE *p) {
+	WORD __tmp = *(WORD*)*p;
+
+	*p += sizeof(WORD);
+	return __tmp;
+}
+
+static WORD __put_WORD(LPBYTE *p, WORD w) {
+	*(WORD*)*p = w;
+	*p += sizeof(WORD);
+	return w;
+}
+
+static BYTE __get_BYTE(LPBYTE *p) {
+	BYTE __tmp = **p;
+	*p++;
+	return __tmp;
+}
+
+static BYTE __put_BYTE(LPBYTE *p, BYTE b) {
+	**p = b;
+	*p++;
+	return b;
+}
 
 /**********************************************************************
  *	    ConvertDialog32To16   (KERNEL.615)
  */
-VOID WINAPI ConvertDialog32To16( LPVOID dialog32, DWORD size, LPVOID dialog16 )
+VOID WINAPI ConvertDialog32To16( LPVOID dialog32, DWORD size, LPVOID _dialog16 )
 {
-    LPVOID p = dialog32;
+    LPBYTE p = dialog32;
+    LPBYTE dialog16 = _dialog16;
     WORD nbItems, data, dialogEx;
     DWORD style;
 
-    style = *((DWORD *)dialog16)++ = *((DWORD *)p)++;
-    dialogEx = (style == 0xffff0001);  /* DIALOGEX resource */
+    style = COPY_DWORD;
+    dialogEx = (style == 0xffff0001);	/* DIALOGEX resource */
     if (dialogEx)
     {
-        *((DWORD *)dialog16)++ = *((DWORD *)p)++; /* helpID */
-        *((DWORD *)dialog16)++ = *((DWORD *)p)++; /* exStyle */
-        style = *((DWORD *)dialog16)++ = *((DWORD *)p)++; /* style */
+	COPY_DWORD;		/* helpID */
+	COPY_DWORD;		/* exStyle */
+        style = COPY_DWORD;	/* style */
     }
     else
-        ((DWORD *)p)++; /* exStyle ignored in 16-bit standard dialog */
+        p += sizeof(DWORD); /* exStyle ignored in 16-bit standard dialog */
 
-    nbItems = *((BYTE *)dialog16)++ = (BYTE)*((WORD *)p)++;
-    *((WORD *)dialog16)++ = *((WORD *)p)++; /* x */
-    *((WORD *)dialog16)++ = *((WORD *)p)++; /* y */
-    *((WORD *)dialog16)++ = *((WORD *)p)++; /* cx */
-    *((WORD *)dialog16)++ = *((WORD *)p)++; /* cy */
+    nbItems = __put_BYTE(&dialog16,__get_WORD(&p));
+    COPY_WORD; /* x */
+    COPY_WORD; /* y */
+    COPY_WORD; /* cx */
+    COPY_WORD; /* cy */
 
     /* Transfer menu name */
     switch (*((WORD *)p))
     {
-    case 0x0000:  ((WORD *)p)++; *((BYTE *)dialog16)++ = 0; break;
-    case 0xffff:  ((WORD *)p)++; *((BYTE *)dialog16)++ = 0xff;
-                  *((WORD *)dialog16)++ = *((WORD *)p)++; break;
+    case 0x0000:  __get_WORD(&p); __put_BYTE(&dialog16,0); break;
+    case 0xffff:  __get_WORD(&p); __put_BYTE(&dialog16,0xff); COPY_WORD; break;
+
     default:      WideCharToMultiByte( CP_ACP, 0, (LPWSTR)p, -1, (LPSTR)dialog16, 0x7fffffff, NULL,NULL );
-                  ((LPSTR)dialog16) += strlen( (LPSTR)dialog16 ) + 1;
-                  ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1;
+                  dialog16 += strlen( (LPSTR)dialog16 ) + 1;
+                  p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR);
                   break;
     }
 
     /* Transfer class name */
     switch (*((WORD *)p))
     {
-    case 0x0000:  ((WORD *)p)++; *((BYTE *)dialog16)++ = 0; break;
-    case 0xffff:  ((WORD *)p)++; *((BYTE *)dialog16)++ = 0xff;
-                  *((WORD *)dialog16)++ = *((WORD *)p)++; break;
+    case 0x0000:  __get_WORD(&p); __put_BYTE(&dialog16,0); break;
+    case 0xffff:  __get_WORD(&p); __put_BYTE(&dialog16,0xff); COPY_WORD; break;
     default:      WideCharToMultiByte( CP_ACP, 0, (LPWSTR)p, -1, (LPSTR)dialog16, 0x7fffffff, NULL,NULL );
-                  ((LPSTR)dialog16) += strlen( (LPSTR)dialog16 ) + 1;
-                  ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1;
+                  dialog16 += strlen( (LPSTR)dialog16 ) + 1;
+                  p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR);
                   break;
     }
 
     /* Transfer window caption */
     WideCharToMultiByte( CP_ACP, 0, (LPWSTR)p, -1, (LPSTR)dialog16, 0x7fffffff, NULL,NULL );
-    ((LPSTR)dialog16) += strlen( (LPSTR)dialog16 ) + 1;
-    ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1;
+    dialog16 += strlen( (LPSTR)dialog16 ) + 1;
+    p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR);
 
     /* Transfer font info */
     if (style & DS_SETFONT)
     {
-        *((WORD *)dialog16)++ = *((WORD *)p)++;  /* pointSize */
+        COPY_WORD;  /* pointSize */
         if (dialogEx)
         {
-            *((WORD *)dialog16)++ = *((WORD *)p)++; /* weight */
-            *((WORD *)dialog16)++ = *((WORD *)p)++; /* italic */
+            COPY_WORD; /* weight */
+            COPY_WORD; /* italic */
         }
         WideCharToMultiByte( CP_ACP, 0, (LPWSTR)p, -1, (LPSTR)dialog16, 0x7fffffff, NULL,NULL );  /* faceName */
-        ((LPSTR)dialog16) += strlen( (LPSTR)dialog16 ) + 1;
-        ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1;
+        dialog16 += strlen( (LPSTR)dialog16 ) + 1;
+        p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR);
     }
 
     /* Transfer dialog items */
@@ -487,65 +546,67 @@
 
         if (dialogEx)
         {
-            *((DWORD *)dialog16)++ = *((DWORD *)p)++; /* helpID */
-            *((DWORD *)dialog16)++ = *((DWORD *)p)++; /* exStyle */
-            *((DWORD *)dialog16)++ = *((DWORD *)p)++; /* style */
+            COPY_DWORD; /* helpID */
+            COPY_DWORD; /* exStyle */
+            COPY_DWORD; /* style */
         }
         else
         {
-            style = *((DWORD *)p)++; /* save style */
-            ((DWORD *)p)++;          /* ignore exStyle */
+            style = __get_DWORD(&p);	/* save style */
+            __get_DWORD(&p);		/* ignore exStyle */
         }
 
-        *((WORD *)dialog16)++ = *((WORD *)p)++; /* x */
-        *((WORD *)dialog16)++ = *((WORD *)p)++; /* y */
-        *((WORD *)dialog16)++ = *((WORD *)p)++; /* cx */
-        *((WORD *)dialog16)++ = *((WORD *)p)++; /* cy */
+        COPY_WORD; /* x */
+        COPY_WORD; /* y */
+        COPY_WORD; /* cx */
+        COPY_WORD; /* cy */
 
         if (dialogEx)
-            *((DWORD *)dialog16)++ = *((DWORD *)p)++; /* ID */
+            COPY_DWORD; /* ID */
         else
         {
-            *((WORD *)dialog16)++ = *((WORD *)p)++; /* ID */
-            *((DWORD *)dialog16)++ = style;  /* style from above */
+            COPY_WORD; /* ID */
+            __put_DWORD(&dialog16,style);  /* style from above */
         }
 
         /* Transfer class name */
         switch (*((WORD *)p))
         {
-        case 0x0000:  ((WORD *)p)++; *((BYTE *)dialog16)++ = 0; break;
-        case 0xffff:  ((WORD *)p)++;
-                      *((BYTE *)dialog16)++ = (BYTE)*((WORD *)p)++; break;
+        case 0x0000:  __get_WORD(&p);
+                      __put_BYTE(&dialog16,0);
+		      break;
+        case 0xffff:  __get_WORD(&p);
+                      __put_BYTE(&dialog16,__get_WORD(&p));
+                      break;
         default:      WideCharToMultiByte( CP_ACP, 0, (LPWSTR)p, -1, (LPSTR)dialog16, 0x7fffffff, NULL,NULL );
-                      ((LPSTR)dialog16) += strlen( (LPSTR)dialog16 ) + 1;
-                      ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1;
+                      dialog16 += strlen( (LPSTR)dialog16 ) + 1;
+                      p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR);
                       break;
         }
 
         /* Transfer window name */
         switch (*((WORD *)p))
         {
-        case 0x0000:  ((WORD *)p)++; *((BYTE *)dialog16)++ = 0; break;
-        case 0xffff:  ((WORD *)p)++; *((BYTE *)dialog16)++ = 0xff;
-                      *((WORD *)dialog16)++ = *((WORD *)p)++; break;
+        case 0x0000:  __get_WORD(&p);__put_BYTE(&dialog16,0); break;
+        case 0xffff:  __get_WORD(&p); __put_BYTE(&dialog16,0xff); COPY_WORD; break;
         default:      WideCharToMultiByte( CP_ACP, 0, (LPWSTR)p, -1, (LPSTR)dialog16, 0x7fffffff, NULL,NULL );
-                      ((LPSTR)dialog16) += strlen( (LPSTR)dialog16 ) + 1;
-                      ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1;
+                      dialog16 += strlen( (LPSTR)dialog16 ) + 1;
+                      p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR);
                       break;
         }
 
         /* Transfer data */
-        data = *((WORD *)p)++;
+        data = __get_WORD(&p);
         if (dialogEx)
-            *((WORD *)dialog16)++ = data;
+            __put_WORD(&dialog16, data);
         else
-            *((BYTE *)dialog16)++ = (BYTE)data;
+            __put_BYTE(&dialog16,(BYTE)data);
 
         if (data)
         {
             memcpy( dialog16, p, data );
-            (LPSTR)dialog16 += data;
-            (LPSTR)p += data;
+            dialog16 += data;
+            p += data;
         }
 
         /* Next item */
@@ -559,56 +620,56 @@
  */
 WORD WINAPI GetDialog32Size16( LPVOID dialog32 )
 {
-    LPVOID p = dialog32;
+    LPBYTE p = dialog32;
     WORD nbItems, data, dialogEx;
     DWORD style;
 
-    style = *((DWORD *)p)++;
+    style = __get_DWORD(&p);
     dialogEx = (style == 0xffff0001);  /* DIALOGEX resource */
     if (dialogEx)
     {
-        ((DWORD *)p)++; /* helpID */
-        ((DWORD *)p)++; /* exStyle */
-        style = *((DWORD *)p)++; /* style */
+        __get_DWORD(&p); /* helpID */
+        __get_DWORD(&p); /* exStyle */
+        style = __get_DWORD(&p); /* style */
     }
     else
-        ((DWORD *)p)++; /* exStyle */
+        __get_DWORD(&p); /* exStyle */
 
-    nbItems = *((WORD *)p)++;
-    ((WORD *)p)++; /* x */
-    ((WORD *)p)++; /* y */
-    ((WORD *)p)++; /* cx */
-    ((WORD *)p)++; /* cy */
+    nbItems = __get_WORD(&p);
+    __get_WORD(&p); /* x */
+    __get_WORD(&p); /* y */
+    __get_WORD(&p); /* cx */
+    __get_WORD(&p); /* cy */
 
     /* Skip menu name */
     switch (*((WORD *)p))
     {
-    case 0x0000:  ((WORD *)p)++; break;
-    case 0xffff:  ((WORD *)p) += 2; break;
-    default:      ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1; break;
+    case 0x0000:  __get_WORD(&p); break;
+    case 0xffff:  __get_WORD(&p); __get_WORD(&p); break;
+    default:      p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR); break;
     }
 
     /* Skip class name */
     switch (*((WORD *)p))
     {
-    case 0x0000:  ((WORD *)p)++; break;
-    case 0xffff:  ((WORD *)p) += 2; break;
-    default:      ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1; break;
+    case 0x0000:  __get_WORD(&p); break;
+    case 0xffff:  __get_WORD(&p); __get_WORD(&p); break;
+    default:      p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR); break;
     }
 
     /* Skip window caption */
-    ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1;
+    p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR);
 
     /* Skip font info */
     if (style & DS_SETFONT)
     {
-        ((WORD *)p)++;  /* pointSize */
+        __get_WORD(&p);;  /* pointSize */
         if (dialogEx)
         {
-            ((WORD *)p)++; /* weight */
-            ((WORD *)p)++; /* italic */
+            __get_WORD(&p); /* weight */
+            __get_WORD(&p); /* italic */
         }
-        ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1;  /* faceName */
+        p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR);  /* faceName */
     }
 
     /* Skip dialog items */
@@ -619,97 +680,102 @@
 
         if (dialogEx)
         {
-            ((DWORD *)p)++; /* helpID */
-            ((DWORD *)p)++; /* exStyle */
-            ((DWORD *)p)++; /* style */
+            __get_DWORD(&p); /* helpID */
+            __get_DWORD(&p); /* exStyle */
+            __get_DWORD(&p); /* style */
         }
         else
         {
-            ((DWORD *)p)++; /* style */
-            ((DWORD *)p)++; /* exStyle */
+            __get_DWORD(&p); /* style */
+            __get_DWORD(&p); /* exStyle */
         }
 
-        ((WORD *)p)++; /* x */
-        ((WORD *)p)++; /* y */
-        ((WORD *)p)++; /* cx */
-        ((WORD *)p)++; /* cy */
+        __get_WORD(&p); /* x */
+        __get_WORD(&p); /* y */
+        __get_WORD(&p); /* cx */
+        __get_WORD(&p); /* cy */
 
         if (dialogEx)
-            ((DWORD *)p)++; /* ID */
+            __get_DWORD(&p); /* ID */
         else
-            ((WORD *)p)++; /* ID */
+            __get_WORD(&p); /* ID */
 
         /* Skip class name */
         switch (*((WORD *)p))
         {
-        case 0x0000:  ((WORD *)p)++; break;
-        case 0xffff:  ((WORD *)p) += 2; break;
-        default:      ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1; break;
+        case 0x0000:  __get_WORD(&p); break;
+        case 0xffff:  __get_WORD(&p); __get_WORD(&p); break;
+        default:      p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR); break;
         }
 
         /* Skip window name */
         switch (*((WORD *)p))
         {
-        case 0x0000:  ((WORD *)p)++; break;
-        case 0xffff:  ((WORD *)p) += 2; break;
-        default:      ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1; break;
+        case 0x0000:  __get_WORD(&p); break;
+        case 0xffff:  __get_WORD(&p); __get_WORD(&p); break;
+        default:      p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR); break;
         }
 
         /* Skip data */
-        data = *((WORD *)p)++;
-        (LPSTR)p += data;
+        data = __get_WORD(&p);
+        p += data;
 
         /* Next item */
         nbItems--;
     }
-
-    return (WORD)((LPSTR)p - (LPSTR)dialog32);
+    return (WORD)(p - (LPBYTE)dialog32);
 }
 
+#undef COPY_WORD
+#define COPY_WORD __copy_WORD(&menu16, &p)
+#undef COPY_DWORD
+#define COPY_DWORD __copy_DWORD(&menu16, &p)
+
 
 /**********************************************************************
  *	    ConvertMenu32To16   (KERNEL.616)
  */
-VOID WINAPI ConvertMenu32To16( LPVOID menu32, DWORD size, LPVOID menu16 )
+VOID WINAPI ConvertMenu32To16( LPVOID menu32, DWORD size, LPVOID _menu16 )
 {
-    LPVOID p = menu32;
+    LPBYTE p = menu32;
+    LPBYTE menu16 = _menu16;
     WORD version, headersize, flags, level = 1;
 
-    version = *((WORD *)menu16)++ = *((WORD *)p)++;
-    headersize = *((WORD *)menu16)++ = *((WORD *)p)++;
+    version = COPY_WORD;
+    headersize = COPY_WORD;
     if ( headersize )
     {
         memcpy( menu16, p, headersize );
-        ((LPSTR)menu16) += headersize;
-        ((LPSTR)p) += headersize;
+        menu16 += headersize;
+        p += headersize;
     }
 
     while ( level )
         if ( version == 0 )  /* standard */
         {
-            flags = *((WORD *)menu16)++ = *((WORD *)p)++;
+            flags = COPY_WORD;
             if ( !(flags & MF_POPUP) )
-                *((WORD *)menu16)++ = *((WORD *)p)++;  /* ID */
+                COPY_WORD;  /* ID */
             else
                 level++;
 
             WideCharToMultiByte( CP_ACP, 0, (LPWSTR)p, -1, (LPSTR)menu16, 0x7fffffff, NULL,NULL );
-            ((LPSTR)menu16) += strlen( (LPSTR)menu16 ) + 1;
-            ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1;
+            menu16 += strlen( (LPSTR)menu16 ) + 1;
+            p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR);
 
             if ( flags & MF_END )
                 level--;
         }
         else  /* extended */
         {
-            *((DWORD *)menu16)++ = *((DWORD *)p)++;  /* fType */
-            *((DWORD *)menu16)++ = *((DWORD *)p)++;  /* fState */
-            *((WORD *)menu16)++ = (WORD)*((DWORD *)p)++; /* ID */
-            flags = *((BYTE *)menu16)++ = (BYTE)*((WORD *)p)++;
+            COPY_DWORD;  /* fType */
+            COPY_DWORD;  /* fState */
+            __put_WORD(&menu16, __get_DWORD(&p)); /* ID */
+            flags = __put_BYTE(&menu16,__get_WORD(&p));
 
             WideCharToMultiByte( CP_ACP, 0, (LPWSTR)p, -1, (LPSTR)menu16, 0x7fffffff, NULL,NULL );
-            ((LPSTR)menu16) += strlen( (LPSTR)menu16 ) + 1;
-            ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1;
+            menu16 += strlen( (LPSTR)menu16 ) + 1;
+            p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR);
 
             /* align on DWORD boundary (32-bit only) */
             p = (LPVOID)((((int)p) + 3) & ~3);
@@ -717,7 +783,7 @@
             /* If popup, transfer helpid */
             if ( flags & 1)
             {
-                *((DWORD *)menu16)++ = *((DWORD *)p)++;
+                COPY_DWORD;
                 level++;
             }
 
@@ -732,35 +798,35 @@
  */
 WORD WINAPI GetMenu32Size16( LPVOID menu32 )
 {
-    LPVOID p = menu32;
+    LPBYTE p = menu32;
     WORD version, headersize, flags, level = 1;
 
-    version = *((WORD *)p)++;
-    headersize = *((WORD *)p)++;
-    ((LPSTR)p) += headersize;
+    version = __get_WORD(&p);
+    headersize = __get_WORD(&p);
+    p += headersize;
 
     while ( level )
         if ( version == 0 )  /* standard */
         {
-            flags = *((WORD *)p)++;
+            flags = __get_WORD(&p);
             if ( !(flags & MF_POPUP) )
-                ((WORD *)p)++;  /* ID */
+                __get_WORD(&p);  /* ID */
             else
                 level++;
 
-            ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1;
+            p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR);
 
             if ( flags & MF_END )
                 level--;
         }
         else  /* extended */
         {
-            ((DWORD *)p)++; /* fType */
-            ((DWORD *)p)++; /* fState */
-            ((DWORD *)p)++; /* ID */
-            flags = *((WORD *)p)++;
+            __get_DWORD(&p); /* fType */
+            __get_DWORD(&p); /* fState */
+            __get_DWORD(&p); /* ID */
+            flags = __get_WORD(&p);
 
-            ((LPWSTR)p) += strlenW( (LPWSTR)p ) + 1;
+            p += (strlenW( (LPWSTR)p ) + 1)*sizeof(WCHAR);
 
             /* align on DWORD boundary (32-bit only) */
             p = (LPVOID)((((int)p) + 3) & ~3);
@@ -768,7 +834,7 @@
             /* If popup, skip helpid */
             if ( flags & 1)
             {
-                ((DWORD *)p)++;
+                __get_DWORD(&p);
                 level++;
             }
 
@@ -776,28 +842,29 @@
                 level--;
         }
 
-    return (WORD)((LPSTR)p - (LPSTR)menu32);
+    return (WORD)(p - (LPBYTE)menu32);
 }
 
 
 /**********************************************************************
  *	    ConvertAccelerator32To16
  */
-static void ConvertAccelerator32To16( LPVOID acc32, DWORD size, LPVOID acc16 )
+static void ConvertAccelerator32To16( LPVOID _acc32, DWORD size, LPVOID _acc16 )
 {
+    LPBYTE acc16 = _acc16, acc32 = _acc32;
     int type;
 
     do
     {
         /* Copy type */
-        type = *((BYTE *)acc16)++ = *((BYTE *)acc32)++;
+        type = __put_BYTE(&acc16, __get_BYTE(&acc32));
         /* Skip padding */
-        ((BYTE *)acc32)++;
+        __get_BYTE(&acc32);
         /* Copy event and IDval */
-        *((WORD *)acc16)++ = *((WORD *)acc32)++;
-        *((WORD *)acc16)++ = *((WORD *)acc32)++;
+	__put_WORD(&acc16, __get_WORD(&acc32));
+	__put_WORD(&acc16, __get_WORD(&acc32));
         /* Skip padding */
-        ((WORD *)acc32)++;
+        __get_WORD(&acc32);
 
     } while ( !( type & 0x80 ) );
 }
-- 



More information about the wine-patches mailing list