summaryrefslogtreecommitdiff
path: root/hw/kdrive/fbdev/fbdev.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2000-09-27 20:47:37 +0000
committerKeith Packard <keithp@keithp.com>2000-09-27 20:47:37 +0000
commit6171187e92152a443f7d5dd7f0dad866b3e275ea (patch)
treefac456544632cc6febb67edf12dc2801d72280ed /hw/kdrive/fbdev/fbdev.c
parent367cab99ece8655bbd8a65096bb68bcfd7ef6fea (diff)
kdrive: memory/fd leaks fixed in fbdev/vesa/trident drivers
Diffstat (limited to 'hw/kdrive/fbdev/fbdev.c')
-rw-r--r--hw/kdrive/fbdev/fbdev.c50
1 files changed, 33 insertions, 17 deletions
diff --git a/hw/kdrive/fbdev/fbdev.c b/hw/kdrive/fbdev/fbdev.c
index 7748b798f..8f628ec1a 100644
--- a/hw/kdrive/fbdev/fbdev.c
+++ b/hw/kdrive/fbdev/fbdev.c
@@ -136,13 +136,14 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv)
priv->var.bits_per_pixel == 16)
{
fake24 = TRUE;
+ scrpriv->shadow = TRUE;
+ scrpriv->rotate = FALSE;
screen->fb[0].redMask = 0xff0000;
screen->fb[0].greenMask = 0x00ff00;
screen->fb[0].blueMask = 0x0000ff;
screen->width = priv->var.xres;
screen->height = priv->var.yres;
screen->softCursor = TRUE;
- return KdShadowScreenInit (screen);
}
else
#endif
@@ -164,9 +165,13 @@ fbdevScreenInitialize (KdScreenInfo *screen, FbdevScrPriv *scrpriv)
screen->width = priv->var.yres;
screen->height = priv->var.xres;
screen->softCursor = TRUE;
- return KdShadowScreenInit (screen);
}
}
+ if (scrpriv->rotate)
+ scrpriv->shadow = TRUE;
+ if (scrpriv->shadow)
+ return KdShadowScreenInit (screen);
+ return TRUE;
}
Bool
@@ -293,23 +298,30 @@ fbdevInitScreen (ScreenPtr pScreen)
ShadowUpdateProc update;
ShadowWindowProc window;
-#ifdef FAKE24_ON_16
- if (pScreenPriv->screen->fb[0].bitsPerPixel == 24 && priv->var.bits_per_pixel == 16)
+ if (scrpriv->shadow)
{
- return KdShadowInitScreen (pScreen, fbdevUpdateFake24, fbdevWindowLinear);
- }
- else
+ window = fbdevWindowLinear;
+#ifdef FAKE24_ON_16
+ if (pScreenPriv->screen->fb[0].bitsPerPixel == 24 && priv->var.bits_per_pixel == 16)
+ {
+ update = fbdevUpdateFake24;
+ }
+ else
#endif /* FAKE24_ON_16 */
- if (scrpriv->rotate)
- {
- window = fbdevWindowLinear;
- switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
- case 8:
- update = shadowUpdateRotate8; break;
- case 16:
- update = shadowUpdateRotate16; break;
- case 32:
- update = shadowUpdateRotate32; break;
+ {
+ update = shadowUpdatePacked;
+ if (scrpriv->rotate)
+ {
+ window = fbdevWindowLinear;
+ switch (pScreenPriv->screen->fb[0].bitsPerPixel) {
+ case 8:
+ update = shadowUpdateRotate8; break;
+ case 16:
+ update = shadowUpdateRotate16; break;
+ case 32:
+ update = shadowUpdateRotate32; break;
+ }
+ }
}
return KdShadowInitScreen (pScreen, update, window);
}
@@ -405,6 +417,10 @@ fbdevRestore (KdCardInfo *card)
void
fbdevScreenFini (KdScreenInfo *screen)
{
+ FbdevScrPriv *scrpriv = screen->driver;
+
+ if (scrpriv->shadow)
+ KdShadowScreenFini (screen);
}
void