xace: typesafe hook function for XACE_KEY_AVAIL
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:
parent
591d95c79e
commit
facdaae4e8
40
Xext/xace.c
40
Xext/xace.c
|
@ -136,43 +136,11 @@ int XaceHookAuthAvail(ClientPtr client, XID authId)
|
|||
return Success;
|
||||
}
|
||||
|
||||
/* Entry point for hook functions. Called by Xserver.
|
||||
*/
|
||||
int
|
||||
XaceHook(int hook, ...)
|
||||
int XaceHookKeyAvail(xEventPtr ev, DeviceIntPtr dev, int count)
|
||||
{
|
||||
union {
|
||||
XaceKeyAvailRec key;
|
||||
} u;
|
||||
int *prv = NULL; /* points to return value from callback */
|
||||
va_list ap; /* argument list */
|
||||
|
||||
if (!XaceHooks[hook])
|
||||
return Success;
|
||||
|
||||
va_start(ap, hook);
|
||||
|
||||
/* Marshal arguments for passing to callback.
|
||||
* Each callback has its own case, which sets up a structure to hold
|
||||
* the arguments and integer return parameter, or in some cases just
|
||||
* sets calldata directly to a single argument (with no return result)
|
||||
*/
|
||||
switch (hook) {
|
||||
case XACE_KEY_AVAIL:
|
||||
u.key.event = va_arg(ap, xEventPtr);
|
||||
u.key.keybd = va_arg(ap, DeviceIntPtr);
|
||||
u.key.count = va_arg(ap, int);
|
||||
|
||||
break;
|
||||
default:
|
||||
va_end(ap);
|
||||
return 0; /* unimplemented hook number */
|
||||
}
|
||||
va_end(ap);
|
||||
|
||||
/* call callbacks and return result, if any. */
|
||||
CallCallbacks(&XaceHooks[hook], &u);
|
||||
return prv ? *prv : Success;
|
||||
XaceKeyAvailRec rec = { ev, dev, count };
|
||||
CallCallbacks(&XaceHooks[XACE_KEY_AVAIL], &rec);
|
||||
return Success;
|
||||
}
|
||||
|
||||
/* XaceHookIsSet
|
||||
|
|
|
@ -94,6 +94,7 @@ int XaceHookServerAccess(ClientPtr client, Mask access_mode);
|
|||
int XaceHookScreenAccess(ClientPtr client, ScreenPtr screen, Mask access_mode);
|
||||
int XaceHookScreensaverAccess(ClientPtr client, ScreenPtr screen, Mask access_mode);
|
||||
int XaceHookAuthAvail(ClientPtr client, XID authId);
|
||||
int XaceHookKeyAvail(xEventPtr ev, DeviceIntPtr dev, int count);
|
||||
|
||||
|
||||
/* Register a callback for a given hook.
|
||||
|
@ -129,14 +130,12 @@ void XaceCensorImage(ClientPtr client,
|
|||
/* Define calls away when XACE is not being built. */
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define XaceHook(args...) Success
|
||||
#define XaceHookIsSet(args...) 0
|
||||
#define XaceHookDispatch(args...) Success
|
||||
#define XaceHookPropertyAccess(args...) Success
|
||||
#define XaceHookSelectionAccess(args...) Success
|
||||
#define XaceCensorImage(args...) { ; }
|
||||
#else
|
||||
#define XaceHook(...) Success
|
||||
#define XaceHookIsSet(...) 0
|
||||
#define XaceHookDispatch(...) Success
|
||||
#define XaceHookPropertyAccess(...) Success
|
||||
|
|
|
@ -1880,7 +1880,7 @@ ProcessDeviceEvent(InternalEvent *ev, DeviceIntPtr device)
|
|||
int count;
|
||||
|
||||
if (EventToCore(ev, &core, &count) == Success && count > 0) {
|
||||
XaceHook(XACE_KEY_AVAIL, core, device, 0);
|
||||
XaceHookKeyAvail(core, device, 0);
|
||||
free(core);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue