Simplify error-handling in dixChangeGC.

Signed-off-by: Jamey Sharp <jamey@minilop.net>
Reviewed-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
Jamey Sharp 2010-05-07 20:00:40 -07:00
parent 4080cd42fd
commit 2160ff5240

View File

@ -263,21 +263,23 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
break; break;
} }
case GCTile: case GCTile:
{
XID newpix = 0;
if (pUnion) if (pUnion)
{ {
NEXT_PTR(PixmapPtr, pPixmap); NEXT_PTR(PixmapPtr, pPixmap);
rc = Success;
} }
else else
{ {
XID newpix;
NEXTVAL(XID, newpix); NEXTVAL(XID, newpix);
rc = dixLookupResourceByType((pointer *)&pPixmap, newpix, rc = dixLookupResourceByType((pointer *)&pPixmap, newpix,
RT_PIXMAP, client, DixReadAccess); RT_PIXMAP, client, DixReadAccess);
} if (rc != Success)
if (rc == Success)
{ {
clientErrorValue = newpix;
error = (rc == BadValue) ? BadPixmap : rc;
break;
}
}
if ((pPixmap->drawable.depth != pGC->depth) || if ((pPixmap->drawable.depth != pGC->depth) ||
(pPixmap->drawable.pScreen != pGC->pScreen)) (pPixmap->drawable.pScreen != pGC->pScreen))
{ {
@ -291,30 +293,25 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
pGC->tileIsPixel = FALSE; pGC->tileIsPixel = FALSE;
pGC->tile.pixmap = pPixmap; pGC->tile.pixmap = pPixmap;
} }
}
else
{
clientErrorValue = newpix;
error = (rc == BadValue) ? BadPixmap : rc;
}
break; break;
}
case GCStipple: case GCStipple:
{
XID newstipple = 0;
if (pUnion) if (pUnion)
{ {
NEXT_PTR(PixmapPtr, pPixmap); NEXT_PTR(PixmapPtr, pPixmap);
rc = Success;
} }
else else
{ {
XID newstipple;
NEXTVAL(XID, newstipple) NEXTVAL(XID, newstipple)
rc = dixLookupResourceByType((pointer *)&pPixmap, newstipple, rc = dixLookupResourceByType((pointer *)&pPixmap, newstipple,
RT_PIXMAP, client, DixReadAccess); RT_PIXMAP, client, DixReadAccess);
} if (rc != Success)
if (rc == Success)
{ {
clientErrorValue = newstipple;
error = (rc == BadValue) ? BadPixmap : rc;
break;
}
}
if ((pPixmap->drawable.depth != 1) || if ((pPixmap->drawable.depth != 1) ||
(pPixmap->drawable.pScreen != pGC->pScreen)) (pPixmap->drawable.pScreen != pGC->pScreen))
{ {
@ -327,14 +324,7 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
(* pGC->pScreen->DestroyPixmap)(pGC->stipple); (* pGC->pScreen->DestroyPixmap)(pGC->stipple);
pGC->stipple = pPixmap; pGC->stipple = pPixmap;
} }
}
else
{
clientErrorValue = newstipple;
error = (rc == BadValue) ? BadPixmap : rc;
}
break; break;
}
case GCTileStipXOrigin: case GCTileStipXOrigin:
NEXTVAL(INT16, pGC->patOrg.x); NEXTVAL(INT16, pGC->patOrg.x);
break; break;
@ -344,30 +334,27 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
case GCFont: case GCFont:
{ {
FontPtr pFont; FontPtr pFont;
XID newfont = 0;
if (pUnion) if (pUnion)
{ {
NEXT_PTR(FontPtr, pFont); NEXT_PTR(FontPtr, pFont);
rc = Success;
} }
else else
{ {
XID newfont;
NEXTVAL(XID, newfont) NEXTVAL(XID, newfont)
rc = dixLookupResourceByType((pointer *)&pFont, newfont, rc = dixLookupResourceByType((pointer *)&pFont, newfont,
RT_FONT, client, DixUseAccess); RT_FONT, client, DixUseAccess);
} if (rc != Success)
if (rc == Success)
{ {
clientErrorValue = newfont;
error = (rc == BadValue) ? BadFont : rc;
break;
}
}
pFont->refcnt++; pFont->refcnt++;
if (pGC->font) if (pGC->font)
CloseFont(pGC->font, (Font)0); CloseFont(pGC->font, (Font)0);
pGC->font = pFont; pGC->font = pFont;
}
else
{
clientErrorValue = newfont;
error = (rc == BadValue) ? BadFont : rc;
}
break; break;
} }
case GCSubwindowMode: case GCSubwindowMode:
@ -403,22 +390,16 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
NEXTVAL(INT16, pGC->clipOrg.y); NEXTVAL(INT16, pGC->clipOrg.y);
break; break;
case GCClipMask: case GCClipMask:
{
Pixmap pid = 0;
int clipType = 0;
if (pUnion) if (pUnion)
{ {
NEXT_PTR(PixmapPtr, pPixmap); NEXT_PTR(PixmapPtr, pPixmap);
} }
else else
{ {
Pixmap pid;
NEXTVAL(Pixmap, pid) NEXTVAL(Pixmap, pid)
if (pid == None) if (pid == None)
{
clipType = CT_NONE;
pPixmap = NullPixmap; pPixmap = NullPixmap;
}
else { else {
rc = dixLookupResourceByType((pointer *)&pPixmap, pid, rc = dixLookupResourceByType((pointer *)&pPixmap, pid,
RT_PIXMAP, client, RT_PIXMAP, client,
@ -426,6 +407,7 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
if (rc != Success) { if (rc != Success) {
clientErrorValue = pid; clientErrorValue = pid;
error = (rc == BadValue) ? BadPixmap : rc; 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)) (pPixmap->drawable.pScreen != pGC->pScreen))
{ {
error = BadMatch; error = BadMatch;
}
else
{
clipType = CT_PIXMAP;
pPixmap->refcnt++;
}
}
if(error == Success)
{
(*pGC->funcs->ChangeClip)(pGC, clipType,
(pointer)pPixmap, 0);
}
break; break;
} }
pPixmap->refcnt++;
}
(*pGC->funcs->ChangeClip)(pGC, pPixmap ? CT_PIXMAP : CT_NONE,
(pointer)pPixmap, 0);
break;
case GCDashOffset: case GCDashOffset:
NEXTVAL(INT16, pGC->dashOffset); NEXTVAL(INT16, pGC->dashOffset);
break; break;