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
38
Xext/xace.c
38
Xext/xace.c
|
@ -136,43 +136,11 @@ int XaceHookAuthAvail(ClientPtr client, XID authId)
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Entry point for hook functions. Called by Xserver.
|
int XaceHookKeyAvail(xEventPtr ev, DeviceIntPtr dev, int count)
|
||||||
*/
|
|
||||||
int
|
|
||||||
XaceHook(int hook, ...)
|
|
||||||
{
|
{
|
||||||
union {
|
XaceKeyAvailRec rec = { ev, dev, count };
|
||||||
XaceKeyAvailRec key;
|
CallCallbacks(&XaceHooks[XACE_KEY_AVAIL], &rec);
|
||||||
} u;
|
|
||||||
int *prv = NULL; /* points to return value from callback */
|
|
||||||
va_list ap; /* argument list */
|
|
||||||
|
|
||||||
if (!XaceHooks[hook])
|
|
||||||
return Success;
|
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* XaceHookIsSet
|
/* XaceHookIsSet
|
||||||
|
|
|
@ -94,6 +94,7 @@ int XaceHookServerAccess(ClientPtr client, Mask access_mode);
|
||||||
int XaceHookScreenAccess(ClientPtr client, ScreenPtr screen, Mask access_mode);
|
int XaceHookScreenAccess(ClientPtr client, ScreenPtr screen, Mask access_mode);
|
||||||
int XaceHookScreensaverAccess(ClientPtr client, ScreenPtr screen, Mask access_mode);
|
int XaceHookScreensaverAccess(ClientPtr client, ScreenPtr screen, Mask access_mode);
|
||||||
int XaceHookAuthAvail(ClientPtr client, XID authId);
|
int XaceHookAuthAvail(ClientPtr client, XID authId);
|
||||||
|
int XaceHookKeyAvail(xEventPtr ev, DeviceIntPtr dev, int count);
|
||||||
|
|
||||||
|
|
||||||
/* Register a callback for a given hook.
|
/* Register a callback for a given hook.
|
||||||
|
@ -129,14 +130,12 @@ void XaceCensorImage(ClientPtr client,
|
||||||
/* Define calls away when XACE is not being built. */
|
/* Define calls away when XACE is not being built. */
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#define XaceHook(args...) Success
|
|
||||||
#define XaceHookIsSet(args...) 0
|
#define XaceHookIsSet(args...) 0
|
||||||
#define XaceHookDispatch(args...) Success
|
#define XaceHookDispatch(args...) Success
|
||||||
#define XaceHookPropertyAccess(args...) Success
|
#define XaceHookPropertyAccess(args...) Success
|
||||||
#define XaceHookSelectionAccess(args...) Success
|
#define XaceHookSelectionAccess(args...) Success
|
||||||
#define XaceCensorImage(args...) { ; }
|
#define XaceCensorImage(args...) { ; }
|
||||||
#else
|
#else
|
||||||
#define XaceHook(...) Success
|
|
||||||
#define XaceHookIsSet(...) 0
|
#define XaceHookIsSet(...) 0
|
||||||
#define XaceHookDispatch(...) Success
|
#define XaceHookDispatch(...) Success
|
||||||
#define XaceHookPropertyAccess(...) Success
|
#define XaceHookPropertyAccess(...) Success
|
||||||
|
|
|
@ -1880,7 +1880,7 @@ ProcessDeviceEvent(InternalEvent *ev, DeviceIntPtr device)
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
if (EventToCore(ev, &core, &count) == Success && count > 0) {
|
if (EventToCore(ev, &core, &count) == Success && count > 0) {
|
||||||
XaceHook(XACE_KEY_AVAIL, core, device, 0);
|
XaceHookKeyAvail(core, device, 0);
|
||||||
free(core);
|
free(core);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue