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:
parent
4080cd42fd
commit
2160ff5240
117
dix/gc.c
117
dix/gc.c
|
@ -263,78 +263,68 @@ 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)
|
||||||
|
{
|
||||||
|
clientErrorValue = newpix;
|
||||||
|
error = (rc == BadValue) ? BadPixmap : rc;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (rc == Success)
|
if ((pPixmap->drawable.depth != pGC->depth) ||
|
||||||
|
(pPixmap->drawable.pScreen != pGC->pScreen))
|
||||||
{
|
{
|
||||||
if ((pPixmap->drawable.depth != pGC->depth) ||
|
error = BadMatch;
|
||||||
(pPixmap->drawable.pScreen != pGC->pScreen))
|
|
||||||
{
|
|
||||||
error = BadMatch;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pPixmap->refcnt++;
|
|
||||||
if (!pGC->tileIsPixel)
|
|
||||||
(* pGC->pScreen->DestroyPixmap)(pGC->tile.pixmap);
|
|
||||||
pGC->tileIsPixel = FALSE;
|
|
||||||
pGC->tile.pixmap = pPixmap;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
clientErrorValue = newpix;
|
pPixmap->refcnt++;
|
||||||
error = (rc == BadValue) ? BadPixmap : rc;
|
if (!pGC->tileIsPixel)
|
||||||
|
(* pGC->pScreen->DestroyPixmap)(pGC->tile.pixmap);
|
||||||
|
pGC->tileIsPixel = FALSE;
|
||||||
|
pGC->tile.pixmap = pPixmap;
|
||||||
}
|
}
|
||||||
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)
|
||||||
|
{
|
||||||
|
clientErrorValue = newstipple;
|
||||||
|
error = (rc == BadValue) ? BadPixmap : rc;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (rc == Success)
|
if ((pPixmap->drawable.depth != 1) ||
|
||||||
|
(pPixmap->drawable.pScreen != pGC->pScreen))
|
||||||
{
|
{
|
||||||
if ((pPixmap->drawable.depth != 1) ||
|
error = BadMatch;
|
||||||
(pPixmap->drawable.pScreen != pGC->pScreen))
|
|
||||||
{
|
|
||||||
error = BadMatch;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pPixmap->refcnt++;
|
|
||||||
if (pGC->stipple)
|
|
||||||
(* pGC->pScreen->DestroyPixmap)(pGC->stipple);
|
|
||||||
pGC->stipple = pPixmap;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
clientErrorValue = newstipple;
|
pPixmap->refcnt++;
|
||||||
error = (rc == BadValue) ? BadPixmap : rc;
|
if (pGC->stipple)
|
||||||
|
(* pGC->pScreen->DestroyPixmap)(pGC->stipple);
|
||||||
|
pGC->stipple = pPixmap;
|
||||||
}
|
}
|
||||||
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)
|
||||||
|
{
|
||||||
|
clientErrorValue = newfont;
|
||||||
|
error = (rc == BadValue) ? BadFont : rc;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (rc == Success)
|
pFont->refcnt++;
|
||||||
{
|
if (pGC->font)
|
||||||
pFont->refcnt++;
|
CloseFont(pGC->font, (Font)0);
|
||||||
if (pGC->font)
|
pGC->font = pFont;
|
||||||
CloseFont(pGC->font, (Font)0);
|
|
||||||
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;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else
|
pPixmap->refcnt++;
|
||||||
{
|
|
||||||
clipType = CT_PIXMAP;
|
|
||||||
pPixmap->refcnt++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(error == Success)
|
|
||||||
{
|
|
||||||
(*pGC->funcs->ChangeClip)(pGC, clipType,
|
|
||||||
(pointer)pPixmap, 0);
|
|
||||||
}
|
}
|
||||||
|
(*pGC->funcs->ChangeClip)(pGC, pPixmap ? CT_PIXMAP : CT_NONE,
|
||||||
|
(pointer)pPixmap, 0);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case GCDashOffset:
|
case GCDashOffset:
|
||||||
NEXTVAL(INT16, pGC->dashOffset);
|
NEXTVAL(INT16, pGC->dashOffset);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue