Skip to contentSkip to conversation

fbdev: Possible endian fix in cfbimageblit

PATCH RESEND New Antonino A. Daplas 1 participant 1 message Nov 7, 2005 Framebuffer layer

lore
Share & tools
lore
#0 lore raw

PATCH RESEND 3/7 fbdev: Possible endian fix in cfbimageblit

Fix possible endian bug(?) when bit testing in slow_imageblit(). This function is rarely called (only if (width * bpp) % 32 != 0) thus the bug is not triggered.

However, if the console is rotated at 90 or 270 degrees, the height becomes the width, and a variety of fonts have heights that will force a call to slow_imageblit().

---
 cfbimgblt.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletion(-)

I inadvertently included a semicolon here
#define BIT_NR(b) (7 - (b));

Tony

drivers/video/cfbimgblt.c +3 -1
index da664ce..f3b89fe 100644
@@ -80,10 +80,12 @@ static u32 cfb_tab32[] = {
 #define LEFT_POS(bpp)          (32 - bpp)
 #define SHIFT_HIGH(val, bits)  ((val) >> (bits))
 #define SHIFT_LOW(val, bits)   ((val) << (bits))
+#define BIT_NR(b)              (7 - (b))
 #else
 #define LEFT_POS(bpp)          (0)
 #define SHIFT_HIGH(val, bits)  ((val) << (bits))
 #define SHIFT_LOW(val, bits)   ((val) >> (bits))
+#define BIT_NR(b)              (b)
 #endif
 
 static inline void color_imageblit(const struct fb_image *image, 
@@ -177,7 +179,7 @@ static inline void slow_imageblit(const 
 
 		while (j--) {
 			l--;
-			color = (*s & (1 << l)) ? fgcolor : bgcolor;
+			color = (*s & 1 << (BIT_NR(l))) ? fgcolor : bgcolor;
 			color <<= LEFT_POS(bpp);
 			val |= SHIFT_HIGH(color, shift);
 			

-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download it for free - -and be entered to win a 42" plasma tv or your very own Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php