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>
This commit is contained in:
Enrico Weigelt, metux IT consult 2024-05-17 15:22:46 +02:00 committed by Marge Bot
parent 47d6c3ad75
commit 51d8bcfc0d
5 changed files with 15 additions and 11 deletions

View File

@ -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);

View File

@ -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.

View File

@ -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;

View File

@ -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,

View File

@ -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;