From e7785e8af3e34f9d1089d8499d16802984ab9823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20H=C3=B8gsberg?= Date: Tue, 14 Apr 2009 14:24:31 -0400 Subject: [PATCH] xfixes: Fix a couple of resource lookups --- xfixes/cursor.c | 21 +++++++++++++-------- xfixes/xfixes.h | 20 +++++++++++++------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/xfixes/cursor.c b/xfixes/cursor.c index 99403e5ce..33ab4265c 100644 --- a/xfixes/cursor.c +++ b/xfixes/cursor.c @@ -64,14 +64,19 @@ static DevPrivateKey CursorScreenPrivateKey = &CursorScreenPrivateKeyIndex; static void deleteCursorHideCountsForScreen (ScreenPtr pScreen); -#define VERIFY_CURSOR(pCursor, cursor, client, access) { \ - pCursor = (CursorPtr)SecurityLookupIDByType((client), (cursor), \ - RT_CURSOR, (access)); \ - if (!pCursor) { \ - (client)->errorValue = (cursor); \ - return BadCursor; \ - } \ -} +#define VERIFY_CURSOR(pCursor, cursor, client, access) \ + do { \ + int err; \ + err = dixLookupResourceByType((pointer *) &pCursor, cursor, \ + RT_CURSOR, client, access); \ + if (err == BadValue) { \ + client->errorValue = cursor; \ + return BadCursor; \ + } else if (err != Success) { \ + client->errorValue = cursor; \ + return err; \ + } \ + } while (0) /* * There is a global list of windows selecting for cursor events diff --git a/xfixes/xfixes.h b/xfixes/xfixes.h index ade2f8236..69d162ffe 100644 --- a/xfixes/xfixes.h +++ b/xfixes/xfixes.h @@ -32,13 +32,19 @@ extern _X_EXPORT RESTYPE RegionResType; extern _X_EXPORT int XFixesErrorBase; -#define VERIFY_REGION(pRegion, rid, client, mode) { \ - pRegion = SecurityLookupIDByType (client, rid, RegionResType, mode); \ - if (!pRegion) { \ - client->errorValue = rid; \ - return XFixesErrorBase + BadRegion; \ - } \ -} +#define VERIFY_REGION(pRegion, rid, client, mode) \ + do { \ + int err; \ + err = dixLookupResourceByType((pointer *) &pRegion, rid, \ + RegionResType, client, mode); \ + if (err == BadValue) { \ + client->errorValue = rid; \ + return XFixesErrorBase + BadRegion; \ + } else if (err != Success) { \ + client->errorValue = rid; \ + return err; \ + } \ + } while (0) #define VERIFY_REGION_OR_NONE(pRegion, rid, client, mode) { \ pRegion = 0; \