summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEnrico Weigelt, metux IT consult <info@metux.net>2024-05-17 15:22:46 +0200
committerMarge Bot <emma+marge@anholt.net>2024-06-23 21:07:48 +0000
commit51d8bcfc0db6b0ee56ab9d8b8eff337b713b9278 (patch)
treed996660fc1e58b9a68f8e7ad7457d74b5c6bb2ae
parent47d6c3ad750f7dd645de0c7e11b5575a7b8a1e67 (diff)
xace: typesafe hook function for XACE_SCREEN_ACCESS
he generic XaceHook() call isn't typesafe (und unnecessarily slow). Better add an explicit function, just like we already have for others. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net> Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1556>
-rw-r--r--Xext/xace.c8
-rw-r--r--Xext/xace.h1
-rw-r--r--dbe/dbe.c2
-rw-r--r--dix/dispatch.c9
-rw-r--r--xfixes/cursor.c6
5 files changed, 15 insertions, 11 deletions
diff --git a/Xext/xace.c b/Xext/xace.c
index 9c5e9ddd4..847f14328 100644
--- a/Xext/xace.c
+++ b/Xext/xace.c
@@ -115,6 +115,13 @@ int XaceHookServerAccess(ClientPtr client, Mask access_mode)
return rec.status;
}
+int XaceHookScreenAccess(ClientPtr client, ScreenPtr screen, Mask access_mode)
+{
+ XaceScreenAccessRec rec = { client, screen, access_mode, Success };
+ CallCallbacks(&XaceHooks[XACE_SCREEN_ACCESS], &rec);
+ return rec.status;
+}
+
/* Entry point for hook functions. Called by Xserver.
*/
int
@@ -139,7 +146,6 @@ XaceHook(int hook, ...)
* sets calldata directly to a single argument (with no return result)
*/
switch (hook) {
- case XACE_SCREEN_ACCESS:
case XACE_SCREENSAVER_ACCESS:
u.screen.client = va_arg(ap, ClientPtr);
u.screen.screen = va_arg(ap, ScreenPtr);
diff --git a/Xext/xace.h b/Xext/xace.h
index 0de4a6355..8404fb736 100644
--- a/Xext/xace.h
+++ b/Xext/xace.h
@@ -91,6 +91,7 @@ int XaceHookReceiveAccess(ClientPtr client, WindowPtr win, xEventPtr ev, int cou
int XaceHookClientAccess(ClientPtr client, ClientPtr target, Mask access_mode);
int XaceHookExtAccess(ClientPtr client, ExtensionEntry *ext);
int XaceHookServerAccess(ClientPtr client, Mask access_mode);
+int XaceHookScreenAccess(ClientPtr client, ScreenPtr screen, Mask access_mode);
/* Register a callback for a given hook.
diff --git a/dbe/dbe.c b/dbe/dbe.c
index b9f6690a6..29cac9533 100644
--- a/dbe/dbe.c
+++ b/dbe/dbe.c
@@ -614,7 +614,7 @@ ProcDbeGetVisualInfo(ClientPtr client)
pDrawables[i]->pScreen;
pDbeScreenPriv = DBE_SCREEN_PRIV(pScreen);
- rc = XaceHook(XACE_SCREEN_ACCESS, client, pScreen, DixGetAttrAccess);
+ rc = XaceHookScreenAccess(client, pScreen, DixGetAttrAccess);
if (rc != Success)
goto freeScrVisInfo;
diff --git a/dix/dispatch.c b/dix/dispatch.c
index 290534618..266f5f89f 100644
--- a/dix/dispatch.c
+++ b/dix/dispatch.c
@@ -2523,7 +2523,7 @@ ProcInstallColormap(ClientPtr client)
if (rc != Success)
goto out;
- rc = XaceHook(XACE_SCREEN_ACCESS, client, pcmp->pScreen, DixSetAttrAccess);
+ rc = XaceHookScreenAccess(client, pcmp->pScreen, DixSetAttrAccess);
if (rc != Success) {
if (rc == BadValue)
rc = BadColor;
@@ -2552,7 +2552,7 @@ ProcUninstallColormap(ClientPtr client)
if (rc != Success)
goto out;
- rc = XaceHook(XACE_SCREEN_ACCESS, client, pcmp->pScreen, DixSetAttrAccess);
+ rc = XaceHookScreenAccess(client, pcmp->pScreen, DixSetAttrAccess);
if (rc != Success) {
if (rc == BadValue)
rc = BadColor;
@@ -2582,8 +2582,7 @@ ProcListInstalledColormaps(ClientPtr client)
if (rc != Success)
return rc;
- rc = XaceHook(XACE_SCREEN_ACCESS, client, pWin->drawable.pScreen,
- DixGetAttrAccess);
+ rc = XaceHookScreenAccess(client, pWin->drawable.pScreen, DixGetAttrAccess);
if (rc != Success)
return rc;
@@ -3154,7 +3153,7 @@ ProcQueryBestSize(ClientPtr client)
if (stuff->class != CursorShape && pDraw->type == UNDRAWABLE_WINDOW)
return BadMatch;
pScreen = pDraw->pScreen;
- rc = XaceHook(XACE_SCREEN_ACCESS, client, pScreen, DixGetAttrAccess);
+ rc = XaceHookScreenAccess(client, pScreen, DixGetAttrAccess);
if (rc != Success)
return rc;
(*pScreen->QueryBestSize) (stuff->class, &stuff->width,
diff --git a/xfixes/cursor.c b/xfixes/cursor.c
index 85aa272a7..8f4752d61 100644
--- a/xfixes/cursor.c
+++ b/xfixes/cursor.c
@@ -880,8 +880,7 @@ ProcXFixesHideCursor(ClientPtr client)
* This is the first time this client has hid the cursor
* for this screen.
*/
- ret = XaceHook(XACE_SCREEN_ACCESS, client, pWin->drawable.pScreen,
- DixHideAccess);
+ ret = XaceHookScreenAccess(client, pWin->drawable.pScreen, DixHideAccess);
if (ret != Success)
return ret;
@@ -938,8 +937,7 @@ ProcXFixesShowCursor(ClientPtr client)
return BadMatch;
}
- rc = XaceHook(XACE_SCREEN_ACCESS, client, pWin->drawable.pScreen,
- DixShowAccess);
+ rc = XaceHookScreenAccess(client, pWin->drawable.pScreen, DixShowAccess);
if (rc != Success)
return rc;