[PATCH 11/14] Simplify error-handling in dixChangeGC.

Jamey Sharp jamey at minilop.net
Sat May 8 16:39:26 PDT 2010


Signed-off-by: Jamey Sharp <jamey at minilop.net>
Reviewed-by: Keith Packard <keithp at keithp.com>
---
 dix/gc.c |  117 ++++++++++++++++++++++++-------------------------------------
 1 files changed, 46 insertions(+), 71 deletions(-)

diff --git a/dix/gc.c b/dix/gc.c
index 941fbb3..2cbb6f6 100644
--- a/dix/gc.c
+++ b/dix/gc.c
@@ -254,78 +254,68 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
 		break;
 	    }
 	    case GCTile:
-	    {
-		XID newpix = 0;
 		if (pUnion)
 		{
 		    NEXT_PTR(PixmapPtr, pPixmap);
-		    rc = Success;
 		}
 		else
 		{
+		    XID newpix;
 		    NEXTVAL(XID, newpix);
 		    rc = dixLookupResourceByType((pointer *)&pPixmap, newpix,
 					   RT_PIXMAP, client, DixReadAccess);
-		}
-		if (rc == Success)
-		{
-		    if ((pPixmap->drawable.depth != pGC->depth) ||
-			(pPixmap->drawable.pScreen != pGC->pScreen))
+		    if (rc != Success)
 		    {
-			error = BadMatch;
-		    }
-		    else
-		    {
-			pPixmap->refcnt++;
-			if (!pGC->tileIsPixel)
-			    (* pGC->pScreen->DestroyPixmap)(pGC->tile.pixmap);
-			pGC->tileIsPixel = FALSE;
-			pGC->tile.pixmap = pPixmap;
+			clientErrorValue = newpix;
+			error = (rc == BadValue) ? BadPixmap : rc;
+			break;
 		    }
 		}
+		if ((pPixmap->drawable.depth != pGC->depth) ||
+		    (pPixmap->drawable.pScreen != pGC->pScreen))
+		{
+		    error = BadMatch;
+		}
 		else
 		{
-		    clientErrorValue = newpix;
-		    error = (rc == BadValue) ? BadPixmap : rc;
+		    pPixmap->refcnt++;
+		    if (!pGC->tileIsPixel)
+			(* pGC->pScreen->DestroyPixmap)(pGC->tile.pixmap);
+		    pGC->tileIsPixel = FALSE;
+		    pGC->tile.pixmap = pPixmap;
 		}
 		break;
-	    }
 	    case GCStipple:
-	    {
-		XID newstipple = 0;
 		if (pUnion)
 		{
 		    NEXT_PTR(PixmapPtr, pPixmap);
-		    rc = Success;
 		}
 		else
 		{
+		    XID newstipple;
 		    NEXTVAL(XID, newstipple)
 		    rc = dixLookupResourceByType((pointer *)&pPixmap, newstipple,
 					   RT_PIXMAP, client, DixReadAccess);
-		}
-		if (rc == Success)
-		{
-		    if ((pPixmap->drawable.depth != 1) ||
-			(pPixmap->drawable.pScreen != pGC->pScreen))
+		    if (rc != Success)
 		    {
-			error = BadMatch;
-		    }
-		    else
-		    {
-			pPixmap->refcnt++;
-			if (pGC->stipple)
-			    (* pGC->pScreen->DestroyPixmap)(pGC->stipple);
-			pGC->stipple = pPixmap;
+			clientErrorValue = newstipple;
+			error = (rc == BadValue) ? BadPixmap : rc;
+			break;
 		    }
 		}
+		if ((pPixmap->drawable.depth != 1) ||
+		    (pPixmap->drawable.pScreen != pGC->pScreen))
+		{
+		    error = BadMatch;
+		}
 		else
 		{
-		    clientErrorValue = newstipple;
-		    error = (rc == BadValue) ? BadPixmap : rc;
+		    pPixmap->refcnt++;
+		    if (pGC->stipple)
+			(* pGC->pScreen->DestroyPixmap)(pGC->stipple);
+		    pGC->stipple = pPixmap;
 		}
 		break;
-	    }
 	    case GCTileStipXOrigin:
 		NEXTVAL(INT16, pGC->patOrg.x);
 		break;
@@ -335,30 +325,27 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
 	    case GCFont:
     	    {
 		FontPtr	pFont;
-		XID newfont = 0;
 		if (pUnion)
 		{
 		    NEXT_PTR(FontPtr, pFont);
-		    rc = Success;
 		}
 		else
 		{
+		    XID newfont;
 		    NEXTVAL(XID, newfont)
 		    rc = dixLookupResourceByType((pointer *)&pFont, newfont,
 					   RT_FONT, client, DixUseAccess);
+		    if (rc != Success)
+		    {
+			clientErrorValue = newfont;
+			error = (rc == BadValue) ? BadFont : rc;
+			break;
+		    }
 		}
-		if (rc == Success)
-		{
-		    pFont->refcnt++;
-		    if (pGC->font)
-    		        CloseFont(pGC->font, (Font)0);
-		    pGC->font = pFont;
-		 }
-		else
-		{
-		    clientErrorValue = newfont;
-		    error = (rc == BadValue) ? BadFont : rc;
-		}
+		pFont->refcnt++;
+		if (pGC->font)
+		    CloseFont(pGC->font, (Font)0);
+		pGC->font = pFont;
 		break;
 	    }
 	    case GCSubwindowMode:
@@ -394,22 +381,16 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
 		NEXTVAL(INT16, pGC->clipOrg.y);
 		break;
 	    case GCClipMask:
-	    {
-		Pixmap pid = 0;
-		int    clipType = 0;
-
 		if (pUnion)
 		{
 		    NEXT_PTR(PixmapPtr, pPixmap);
 		}
 		else
 		{
+		    Pixmap pid;
 		    NEXTVAL(Pixmap, pid)
 		    if (pid == None)
-		    {
-			clipType = CT_NONE;
 			pPixmap = NullPixmap;
-		    }
 		    else {
 			rc = dixLookupResourceByType((pointer *)&pPixmap, pid,
 					       RT_PIXMAP, client,
@@ -417,6 +398,7 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
 			if (rc != Success) {
 			    clientErrorValue = pid;
 			    error = (rc == BadValue) ? BadPixmap : rc;
+			    break;
 			}
 		    }
 		}
@@ -427,20 +409,13 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
 			(pPixmap->drawable.pScreen != pGC->pScreen))
 		    {
 			error = BadMatch;
+			break;
 		    }
-		    else
-		    {
-			clipType = CT_PIXMAP;
-			pPixmap->refcnt++;
-		    }
-		}
-		if(error == Success)
-		{
-		    (*pGC->funcs->ChangeClip)(pGC, clipType,
-					      (pointer)pPixmap, 0);
+		    pPixmap->refcnt++;
 		}
+		(*pGC->funcs->ChangeClip)(pGC, pPixmap ? CT_PIXMAP : CT_NONE,
+					  (pointer)pPixmap, 0);
 		break;
-	    }
 	    case GCDashOffset:
 		NEXTVAL(INT16, pGC->dashOffset);
 		break;
-- 
1.7.0



More information about the xorg-devel mailing list