summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamey Sharp <jamey@minilop.net>2010-05-07 20:00:40 -0700
committerJamey Sharp <jamey@minilop.net>2010-05-10 11:16:33 -0700
commit2160ff5240d7e11bdc6cec8859fd1f10395c8edd (patch)
treea07f75cb85fcc0db6a540c41e88832138e1feab6
parent4080cd42fde8b4c693eab7557581af2622479109 (diff)
Simplify error-handling in dixChangeGC.
Signed-off-by: Jamey Sharp <jamey@minilop.net> Reviewed-by: Keith Packard <keithp@keithp.com>
-rw-r--r--dix/gc.c117
1 files changed, 46 insertions, 71 deletions
diff --git a/dix/gc.c b/dix/gc.c
index 649016595..3058e1541 100644
--- a/dix/gc.c
+++ b/dix/gc.c
@@ -263,78 +263,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;
@@ -344,30 +334,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:
@@ -403,22 +390,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,
@@ -426,6 +407,7 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
if (rc != Success) {
clientErrorValue = pid;
error = (rc == BadValue) ? BadPixmap : rc;
+ break;
}
}
}
@@ -436,20 +418,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;