From f9834d312e3059073e8ad77d9f9d57cb9d96e1e5 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Thu, 31 Mar 2011 15:33:46 +1000 Subject: [PATCH] fb: cleanup fbChangeWindowAttributes This cleans up the duplication in fbChangeWindowAttributes, and fixes a bug if the fb24_32ReformatTile ever failed, since the old code would happily dereference it in the fbEvenTile call a few lines later. Signed-off-by: Dave Airlie Reviewed-by: Mark Kettenis --- fb/fbwindow.c | 55 +++++++++++++++++++-------------------------------- 1 file changed, 20 insertions(+), 35 deletions(-) diff --git a/fb/fbwindow.c b/fb/fbwindow.c index d01e6d44d..7906f8dd2 100644 --- a/fb/fbwindow.c +++ b/fb/fbwindow.c @@ -146,51 +146,36 @@ fbCopyWindow(WindowPtr pWin, fbValidateDrawable (&pWin->drawable); } +static void +fbFixupWindowPixmap(DrawablePtr pDrawable, PixmapPtr *ppPixmap) +{ + PixmapPtr pPixmap = *ppPixmap; + + if (pPixmap->drawable.bitsPerPixel != pDrawable->bitsPerPixel) + { + pPixmap = fb24_32ReformatTile (pPixmap, pDrawable->bitsPerPixel); + if (!pPixmap) + return; + (*pDrawable->pScreen->DestroyPixmap) (*ppPixmap); + *ppPixmap = pPixmap; + } + if (FbEvenTile (pPixmap->drawable.width * + pPixmap->drawable.bitsPerPixel)) + fbPadPixmap (pPixmap); +} + Bool fbChangeWindowAttributes(WindowPtr pWin, unsigned long mask) { - PixmapPtr pPixmap; - if (mask & CWBackPixmap) { if (pWin->backgroundState == BackgroundPixmap) - { - pPixmap = pWin->background.pixmap; - if (pPixmap->drawable.bitsPerPixel != pWin->drawable.bitsPerPixel) - { - pPixmap = fb24_32ReformatTile (pPixmap, - pWin->drawable.bitsPerPixel); - if (pPixmap) - { - (*pWin->drawable.pScreen->DestroyPixmap) (pWin->background.pixmap); - pWin->background.pixmap = pPixmap; - } - } - if (FbEvenTile (pPixmap->drawable.width * - pPixmap->drawable.bitsPerPixel)) - fbPadPixmap (pPixmap); - } + fbFixupWindowPixmap(&pWin->drawable, &pWin->background.pixmap); } if (mask & CWBorderPixmap) { if (pWin->borderIsPixel == FALSE) - { - pPixmap = pWin->border.pixmap; - if (pPixmap->drawable.bitsPerPixel != - pWin->drawable.bitsPerPixel) - { - pPixmap = fb24_32ReformatTile (pPixmap, - pWin->drawable.bitsPerPixel); - if (pPixmap) - { - (*pWin->drawable.pScreen->DestroyPixmap) (pWin->border.pixmap); - pWin->border.pixmap = pPixmap; - } - } - if (FbEvenTile (pPixmap->drawable.width * - pPixmap->drawable.bitsPerPixel)) - fbPadPixmap (pPixmap); - } + fbFixupWindowPixmap(&pWin->drawable, &pWin->border.pixmap); } return TRUE; }