PATCH: dib / undefined C constructs

Marcus Meissner marcus at jet.franken.de
Tue Mar 27 23:35:30 CST 2001


Hi,

gcc-current was rather unhappy about some constructs we use in
graphics/x11drv/dib.c:

- XGetPixel might be/is a macro, so don't use postincrements in its arguments.
- assigned a new value to a used value within an expression is undefined.

I fixed those but did not test them.

Ciao, Marcus

Changelog:
	fixed undefined C constructs. (val assignment in expressions using it,
	postinc operators in macros).

Index: dib.c
===================================================================
RCS file: /home/wine/wine/graphics/x11drv/dib.c,v
retrieving revision 1.73
diff -u -r1.73 dib.c
--- dib.c	2001/03/05 19:59:29	1.73
+++ dib.c	2001/03/28 06:27:54
@@ -822,15 +822,15 @@
             bmpImage->bits_per_pixel, (int)bmpImage->red_mask, 
             (int)bmpImage->green_mask, (int)bmpImage->blue_mask );
       for (h = lines-1; h >= 0; h--) {
-	for (x = 0; x < dstwidth/2; x++) {
+	for (x = 0; x < dstwidth; x+=2 ) {
 	  *bits++ = (X11DRV_DIB_MapColor((int *)colors, 16, 
-					  XGetPixel( bmpImage, x++, h ), 0) << 4)
+				XGetPixel( bmpImage, x, h ), 0) << 4)
 	    | (X11DRV_DIB_MapColor((int *)colors, 16,
-					XGetPixel( bmpImage, x++, h ), 0) & 0x0f);
+				XGetPixel( bmpImage, x+1 , h ), 0) & 0x0f);
            }
            if (dstwidth & 1)
 	  *bits = (X11DRV_DIB_MapColor((int *)colors, 16,
-					XGetPixel( bmpImage, x++, h ), 0) << 4);
+				XGetPixel( bmpImage, (x+1), h ), 0) << 4);
 	bits = (dstbits += linebytes);
        }
       break;
@@ -1931,10 +1931,19 @@
                     for (h = lines - 1; h >= 0; h--) {              /* Do 4 pixels at a time */
                         dstpixel = (LPWORD) (bmpImage->data + h * bmpImage->bytes_per_line + left*2);
                         for (x = 0; x < dstwidth/4; x++) {
-                            *dstpixel++ = (WORD)((((val = *ptr++) << 7) & 0x7c00) | ((val >> 6) & 0x03e0) | ((val >> 19) & 0x1f));
-                            *dstpixel++ = (WORD)(((val >> 17) & 0x7c00) | (((val = *ptr++) << 2) & 0x03e0) | ((val >> 11) & 0x1f));
-                            *dstpixel++ = (WORD)(((val >> 9) & 0x07c00) | ((val >> 22) & 0x03e0) | (((val = *ptr++) >> 3) & 0x1f));
-                            *dstpixel++ = (WORD)(((val >> 1) & 0x07c00) | ((val >> 14) & 0x03e0) | ((val >> 27) & 0x1f));
+			    val = *ptr++;
+                            *dstpixel++ = (WORD)(((val << 7) & 0x7c00) | ((val >> 6) & 0x03e0) | ((val >> 19) & 0x1f));
+                            *dstpixel   = (WORD)((val >> 17) & 0x7c00);
+
+
+			    val = *ptr++;
+			    *dstpixel++ |= (WORD)(((val << 2) & 0x03e0) | ((val >> 11) & 0x1f));
+                            *dstpixel    = (WORD)(((val >> 9) & 0x07c00) | ((val >> 22) & 0x03e0));
+
+
+			    val = *ptr++;
+			    *dstpixel++ |= (WORD)((val  >> 3) & 0x1f);
+                            *dstpixel++  = (WORD)(((val >> 1) & 0x07c00) | ((val >> 14) & 0x03e0) | ((val >> 27) & 0x1f));
                         }
                         for (bits = (LPBYTE)ptr, divk=div; divk > 0; divk--, bits+=3)  /* dstwidth not divisible by 4? */
                             *dstpixel++ = (((WORD)bits[0] << 7) & 0x07c00) |
@@ -1954,10 +1963,15 @@
                     for (h = lines - 1; h >= 0; h--) {              /* Do 4 pixels at a time */
                         dstpixel = (LPWORD) (bmpImage->data + h * bmpImage->bytes_per_line + left*2);
                         for (x = 0; x < dstwidth/4; x++) {
-                            *dstpixel++ = (WORD)((((val = *ptr++) >> 3) & 0x1f) | ((val >> 6) & 0x03e0) | ((val >> 9) & 0x7c00));
-                            *dstpixel++ = (WORD)(((val >> 27) & 0x1f) | (((val = *ptr++) << 2) & 0x03e0) | ((val >> 1) & 0x7c00));
-                            *dstpixel++ = (WORD)(((val >> 19) & 0x1f) | ((val >> 22) & 0x03e0) | (((val = *ptr++) << 7) & 0x7c00));
-                            *dstpixel++ = (WORD)(((val >> 11) & 0x1f) | ((val >> 14) & 0x03e0) | ((val >> 17) & 0x7c00));
+			    val = *ptr++;
+                            *dstpixel++  = (WORD)(((val >> 3) & 0x1f) | ((val >> 6) & 0x03e0) | ((val >> 9) & 0x7c00));
+                            *dstpixel    = (WORD)((val >> 27) & 0x1f);
+			    val = *ptr++;
+                            *dstpixel++ |= (WORD)(((val << 2) & 0x03e0) | ((val >> 1) & 0x7c00));
+                            *dstpixel    = (WORD)((val >> 19) & 0x1f) | ((val >> 22) & 0x03e0);
+			    val = *ptr++;
+			    *dstpixel++ |= (WORD)(((val << 7) & 0x7c00));
+                            *dstpixel++  = (WORD)(((val >> 11) & 0x1f) | ((val >> 14) & 0x03e0) | ((val >> 17) & 0x7c00));
                         }
                         for (bits = (LPBYTE)ptr, divk=div; divk > 0; divk--, bits+=3)  /* dstwidth not divisible by 4? */
                             *dstpixel++ = (((WORD)bits[2] << 7) & 0x07c00) |
@@ -1984,10 +1998,15 @@
 		    for (h = lines - 1; h >= 0; h--) {              /* Do 4 pixels at a time */
                         dstpixel = (LPWORD) (bmpImage->data + h * bmpImage->bytes_per_line + left*2);
                         for (x = 0; x < dstwidth/4; x++) {
-                            *dstpixel++ = (WORD)((((val = *ptr++) >> 3) & 0x1f) | ((val >> 5) & 0x07e0) | ((val >> 8) & 0xf800));
-                            *dstpixel++ = (WORD)(((val >> 27) & 0x1f) | (((val = *ptr++) << 3) & 0x07e0) | ((val) & 0xf800));
-                            *dstpixel++ = (WORD)(((val >> 19) & 0x1f) | ((val >> 21) & 0x07e0) | (((val = *ptr++) << 8) & 0xf800));
-                            *dstpixel++ = (WORD)(((val >> 11) & 0x1f) | ((val >> 13) & 0x07e0) | ((val >> 16) & 0xf800));
+			    val = *ptr++;
+                            *dstpixel++  = (WORD)(((val >> 3) & 0x1f) | ((val >> 5) & 0x07e0) | ((val >> 8) & 0xf800));
+                            *dstpixel    = (WORD)((val >> 27) & 0x1f);
+			    val = *ptr++;
+                            *dstpixel++ |= (WORD)(((val << 3) & 0x07e0) | ((val) & 0xf800));
+                            *dstpixel    = (WORD)((val >> 19) & 0x1f) | ((val >> 21) & 0x07e0);
+			    val = *ptr++;
+                            *dstpixel++ |= (WORD)((val << 8) & 0xf800);
+                            *dstpixel++  = (WORD)(((val >> 11) & 0x1f) | ((val >> 13) & 0x07e0) | ((val >> 16) & 0xf800));
                         }
                         for (   bits = (LPBYTE)ptr, divk=div; divk > 0; divk--, bits+=3)  /* dstwidth is not divisible by 4? */
                             *dstpixel++ = (((WORD)bits[2] << 8) & 0xf800) |
@@ -2001,9 +2020,14 @@
 		    for (h = lines - 1; h >= 0; h--) {              /* Do 4 pixels at a time */
                         dstpixel = (LPWORD) (bmpImage->data + h * bmpImage->bytes_per_line + left*2);
                         for (x = 0; x < dstwidth/4; x++) {
-                            *dstpixel++ = (WORD)((((val = *ptr++) << 8) & 0xf800) | ((val >> 5) & 0x07e0) | ((val >> 19) & 0x1f));
-                            *dstpixel++ = (WORD)(((val >> 16) & 0xf800) | (((val = *ptr++) << 3) & 0x07e0) | ((val >> 11) & 0x1f));
-                            *dstpixel++ = (WORD)(((val >> 8) & 0xf800) | ((val >> 21) & 0x07e0) | (((val = *ptr++) >> 3) & 0x1f));
+			    val = *ptr++;
+                            *dstpixel++ = (WORD)(((val << 8) & 0xf800) | ((val >> 5) & 0x07e0) | ((val >> 19) & 0x1f));
+                            *dstpixel   = (WORD)((val >> 16) & 0xf800);
+			    val = *ptr++;
+                            *dstpixel++|= (WORD)(((val << 3) & 0x07e0) | ((val >> 11) & 0x1f));
+                            *dstpixel   = (WORD)(((val >> 8) & 0xf800) | ((val >> 21) & 0x07e0));
+			    val = *ptr++;
+                            *dstpixel++|= (WORD)(((val >> 3) & 0x1f));
                             *dstpixel++ = (WORD)((val & 0xf800) | ((val >> 13) & 0x07e0) | ((val >> 27) & 0x1f));
                         }
                         for (   bits = (LPBYTE)ptr, divk=div; divk > 0; divk--, bits+=3)  /* dstwidth is not divisible by 4? */




More information about the wine-patches mailing list