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