diff options
author | Keith Packard <keithp@keithp.com> | 2000-09-27 20:47:37 +0000 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2000-09-27 20:47:37 +0000 |
commit | 6171187e92152a443f7d5dd7f0dad866b3e275ea (patch) | |
tree | fac456544632cc6febb67edf12dc2801d72280ed /hw/kdrive/fbdev/fbdev.c | |
parent | 367cab99ece8655bbd8a65096bb68bcfd7ef6fea (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.c | 50 |
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 |