diff --git a/Xext/bigreq.c b/Xext/bigreq.c index e31e5923e1..2e3247b961 100644 --- a/Xext/bigreq.c +++ b/Xext/bigreq.c @@ -33,6 +33,7 @@ from The Open Group. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "miext/extinit_priv.h" #include "misc.h" diff --git a/Xext/damage/damageext.c b/Xext/damage/damageext.c index c163298234..d5809814a6 100644 --- a/Xext/damage/damageext.c +++ b/Xext/damage/damageext.c @@ -27,6 +27,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "include/pixmapstr.h" #include "miext/extinit_priv.h" #include "os/client_priv.h" diff --git a/Xext/dpms.c b/Xext/dpms.c index b025cc3c1e..20c549d4c6 100644 --- a/Xext/dpms.c +++ b/Xext/dpms.c @@ -33,6 +33,7 @@ Equipment Corporation. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "miext/extinit_priv.h" #include "os/screensaver.h" #include "Xext/geext_priv.h" diff --git a/Xext/geext.c b/Xext/geext.c index 76bffa2554..7c4eaece68 100644 --- a/Xext/geext.c +++ b/Xext/geext.c @@ -29,6 +29,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "miext/extinit_priv.h" #include "Xext/geext_priv.h" diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c index a144d794e6..389983ca49 100644 --- a/Xext/panoramiX.c +++ b/Xext/panoramiX.c @@ -32,6 +32,7 @@ Equipment Corporation. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/resource_priv.h" #include "dix/rpcbuf_priv.h" #include "dix/screen_hooks_priv.h" diff --git a/Xext/panoramiXprocs.c b/Xext/panoramiXprocs.c index 8ac8dda0dd..3cbbefda4d 100644 --- a/Xext/panoramiXprocs.c +++ b/Xext/panoramiXprocs.c @@ -32,6 +32,7 @@ Equipment Corporation. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "dix/screenint_priv.h" #include "os/osdep.h" diff --git a/Xext/saver.c b/Xext/saver.c index 2505468b4f..2e5b94bce4 100644 --- a/Xext/saver.c +++ b/Xext/saver.c @@ -36,6 +36,7 @@ in this Software without prior written authorization from the X Consortium. #include "dix/colormap_priv.h" #include "dix/cursor_priv.h" #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/window_priv.h" #include "miext/extinit_priv.h" #include "os/osdep.h" diff --git a/Xext/security.c b/Xext/security.c index 47030074f4..e7e3c523e8 100644 --- a/Xext/security.c +++ b/Xext/security.c @@ -33,6 +33,7 @@ in this Software without prior written authorization from The Open Group. #include "dix/dix_priv.h" #include "dix/extension_priv.h" #include "dix/registry_priv.h" +#include "dix/request_priv.h" #include "dix/resource_priv.h" #include "miext/extinit_priv.h" #include "os/audit.h" diff --git a/Xext/shape.c b/Xext/shape.c index be90895fc2..477b3d2c84 100644 --- a/Xext/shape.c +++ b/Xext/shape.c @@ -33,6 +33,7 @@ in this Software without prior written authorization from The Open Group. #include "dix/dix_priv.h" #include "dix/gc_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "dix/window_priv.h" #include "miext/extinit_priv.h" diff --git a/Xext/shm.c b/Xext/shm.c index 82c36514ec..b92fb1acb3 100644 --- a/Xext/shm.c +++ b/Xext/shm.c @@ -43,6 +43,7 @@ in this Software without prior written authorization from The Open Group. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/screenint_priv.h" #include "dix/screen_hooks_priv.h" #include "miext/extinit_priv.h" diff --git a/Xext/sync.c b/Xext/sync.c index 885d420363..7d707d28db 100644 --- a/Xext/sync.c +++ b/Xext/sync.c @@ -59,6 +59,7 @@ PERFORMANCE OF THIS SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "miext/extinit_priv.h" #include "os/bug_priv.h" #include "os/osdep.h" diff --git a/Xext/vidmode.c b/Xext/vidmode.c index 7f66aded22..d74942599d 100644 --- a/Xext/vidmode.c +++ b/Xext/vidmode.c @@ -38,6 +38,7 @@ from Kaleb S. KEITHLEY #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "os/log_priv.h" #include "os/osdep.h" diff --git a/Xext/xcmisc.c b/Xext/xcmisc.c index 47b5bf7c45..b9a19abd3c 100644 --- a/Xext/xcmisc.c +++ b/Xext/xcmisc.c @@ -34,6 +34,7 @@ from The Open Group. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/resource_priv.h" #include "dix/rpcbuf_priv.h" #include "miext/extinit_priv.h" diff --git a/Xext/xf86bigfont.c b/Xext/xf86bigfont.c index 516b3fa643..5eae215bb8 100644 --- a/Xext/xf86bigfont.c +++ b/Xext/xf86bigfont.c @@ -56,6 +56,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "miext/extinit_priv.h" #include "misc.h" diff --git a/Xext/xres.c b/Xext/xres.c index e51c5b9544..2637cbad7d 100644 --- a/Xext/xres.c +++ b/Xext/xres.c @@ -13,6 +13,7 @@ #include "dix/dix_priv.h" #include "dix/registry_priv.h" +#include "dix/request_priv.h" #include "dix/resource_priv.h" #include "os/client_priv.h" #include "miext/extinit_priv.h" diff --git a/Xext/xselinux_ext.c b/Xext/xselinux_ext.c index 17b7a3a1e3..feaec0ada0 100644 --- a/Xext/xselinux_ext.c +++ b/Xext/xselinux_ext.c @@ -21,6 +21,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "dix/dix_priv.h" #include "dix/property_priv.h" +#include "dix/request_priv.h" #include "dix/selection_priv.h" #include "miext/extinit_priv.h" diff --git a/Xext/xtest.c b/Xext/xtest.c index bc1171a8c2..5f4d6eadbb 100644 --- a/Xext/xtest.c +++ b/Xext/xtest.c @@ -39,6 +39,7 @@ #include "dix/dix_priv.h" #include "dix/exevents_priv.h" #include "dix/inpututils_priv.h" +#include "dix/request_priv.h" #include "mi/mi_priv.h" #include "mi/mipointer_priv.h" #include "miext/extinit_priv.h" diff --git a/Xext/xvdisp.c b/Xext/xvdisp.c index 90589f7b23..28e10c6110 100644 --- a/Xext/xvdisp.c +++ b/Xext/xvdisp.c @@ -32,6 +32,7 @@ SOFTWARE. #include "dix/dix_priv.h" #include "dix/rpcbuf_priv.h" +#include "dix/request_priv.h" #include "dix/screenint_priv.h" #include "Xext/xvdix_priv.h" #include "Xext/panoramiX.h" diff --git a/Xext/xvmc.c b/Xext/xvmc.c index bd24bb39d2..9be3578550 100644 --- a/Xext/xvmc.c +++ b/Xext/xvmc.c @@ -10,6 +10,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/screen_hooks_priv.h" #include "miext/extinit_priv.h" #include "Xext/xvdix_priv.h" diff --git a/Xi/chgdctl.c b/Xi/chgdctl.c index f187b4af08..24f5ebb391 100644 --- a/Xi/chgdctl.c +++ b/Xi/chgdctl.c @@ -58,6 +58,7 @@ SOFTWARE. #include "dix/dix_priv.h" #include "dix/exevents_priv.h" #include "dix/input_priv.h" +#include "dix/request_priv.h" #include "dix/resource_priv.h" #include "Xi/handlers.h" diff --git a/Xi/getbmap.c b/Xi/getbmap.c index 94b49eeda5..1e16e04a4a 100644 --- a/Xi/getbmap.c +++ b/Xi/getbmap.c @@ -56,6 +56,7 @@ SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "Xi/handlers.h" diff --git a/Xi/getdctl.c b/Xi/getdctl.c index 5e97f76fb1..7680c66ea7 100644 --- a/Xi/getdctl.c +++ b/Xi/getdctl.c @@ -50,6 +50,7 @@ SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "Xi/handlers.h" diff --git a/Xi/getfctl.c b/Xi/getfctl.c index 4d54da1a6f..46ff78a798 100644 --- a/Xi/getfctl.c +++ b/Xi/getfctl.c @@ -56,6 +56,7 @@ SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "Xi/handlers.h" diff --git a/Xi/getfocus.c b/Xi/getfocus.c index 94348b932d..d6ed22a2aa 100644 --- a/Xi/getfocus.c +++ b/Xi/getfocus.c @@ -56,6 +56,7 @@ SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "Xi/handlers.h" #include "windowstr.h" /* focus struct */ diff --git a/Xi/getkmap.c b/Xi/getkmap.c index 2d72c3d6d9..3cc614711d 100644 --- a/Xi/getkmap.c +++ b/Xi/getkmap.c @@ -56,6 +56,7 @@ SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "Xi/handlers.h" diff --git a/Xi/getmmap.c b/Xi/getmmap.c index 3419cf1b48..f81988988a 100644 --- a/Xi/getmmap.c +++ b/Xi/getmmap.c @@ -57,6 +57,7 @@ SOFTWARE. #include "dix/dix_priv.h" #include "dix/rpcbuf_priv.h" +#include "dix/request_priv.h" #include "Xi/handlers.h" #include "inputstr.h" /* DeviceIntPtr */ diff --git a/Xi/getprop.c b/Xi/getprop.c index 6b26f972f5..47e558b088 100644 --- a/Xi/getprop.c +++ b/Xi/getprop.c @@ -56,6 +56,7 @@ SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "Xi/handlers.h" diff --git a/Xi/getselev.c b/Xi/getselev.c index 749ec8a585..9d5c426884 100644 --- a/Xi/getselev.c +++ b/Xi/getselev.c @@ -57,6 +57,7 @@ SOFTWARE. #include "dix/dix_priv.h" #include "dix/resource_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "Xi/handlers.h" diff --git a/Xi/getvers.c b/Xi/getvers.c index 96365e021f..7bf47c7e6a 100644 --- a/Xi/getvers.c +++ b/Xi/getvers.c @@ -56,6 +56,7 @@ SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "Xi/handlers.h" #include "inputstr.h" /* DeviceIntPtr */ diff --git a/Xi/grabdev.c b/Xi/grabdev.c index 60e4a5fec2..59304fcd9e 100644 --- a/Xi/grabdev.c +++ b/Xi/grabdev.c @@ -56,6 +56,7 @@ SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "Xi/handlers.h" #include "inputstr.h" /* DeviceIntPtr */ diff --git a/Xi/gtmotion.c b/Xi/gtmotion.c index a781397d1f..75b072571e 100644 --- a/Xi/gtmotion.c +++ b/Xi/gtmotion.c @@ -57,6 +57,7 @@ SOFTWARE. #include "dix/dix_priv.h" #include "dix/exevents_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "Xi/handlers.h" diff --git a/Xi/listdev.c b/Xi/listdev.c index 7a72d8c857..e7c378c55b 100644 --- a/Xi/listdev.c +++ b/Xi/listdev.c @@ -59,6 +59,7 @@ SOFTWARE. #include "dix/dix_priv.h" #include "dix/input_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "Xi/handlers.h" diff --git a/Xi/opendev.c b/Xi/opendev.c index 3916ddab95..6482ed39b2 100644 --- a/Xi/opendev.c +++ b/Xi/opendev.c @@ -57,6 +57,7 @@ SOFTWARE. #include "dix/dix_priv.h" #include "dix/input_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "Xi/handlers.h" diff --git a/Xi/queryst.c b/Xi/queryst.c index 202ac83a42..c2f7c0e986 100644 --- a/Xi/queryst.c +++ b/Xi/queryst.c @@ -40,6 +40,7 @@ from The Open Group. #include "dix/dix_priv.h" #include "dix/exevents_priv.h" #include "dix/input_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "Xi/handlers.h" diff --git a/Xi/setbmap.c b/Xi/setbmap.c index 727871d1c2..8d9c3cb011 100644 --- a/Xi/setbmap.c +++ b/Xi/setbmap.c @@ -57,6 +57,7 @@ SOFTWARE. #include "dix/dix_priv.h" #include "dix/input_priv.h" +#include "dix/request_priv.h" #include "Xi/handlers.h" #include "inputstr.h" /* DeviceIntPtr */ diff --git a/Xi/setdval.c b/Xi/setdval.c index 215fa7835f..97f57604d9 100644 --- a/Xi/setdval.c +++ b/Xi/setdval.c @@ -57,6 +57,7 @@ SOFTWARE. #include "dix/dix_priv.h" #include "dix/input_priv.h" +#include "dix/request_priv.h" #include "dix/resource_priv.h" #include "Xi/handlers.h" diff --git a/Xi/setmmap.c b/Xi/setmmap.c index 45774bd851..917e901741 100644 --- a/Xi/setmmap.c +++ b/Xi/setmmap.c @@ -58,6 +58,7 @@ SOFTWARE. #include "dix/dix_priv.h" #include "dix/input_priv.h" +#include "dix/request_priv.h" #include "Xi/handlers.h" #include "inputstr.h" /* DeviceIntPtr */ diff --git a/Xi/setmode.c b/Xi/setmode.c index 37de5d19af..78142efe58 100644 --- a/Xi/setmode.c +++ b/Xi/setmode.c @@ -57,6 +57,7 @@ SOFTWARE. #include "dix/dix_priv.h" #include "dix/input_priv.h" +#include "dix/request_priv.h" #include "dix/resource_priv.h" #include "Xi/handlers.h" diff --git a/Xi/xigetclientpointer.c b/Xi/xigetclientpointer.c index 331ef759c6..1eddde5002 100644 --- a/Xi/xigetclientpointer.c +++ b/Xi/xigetclientpointer.c @@ -31,6 +31,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "Xi/handlers.h" #include "inputstr.h" /* DeviceIntPtr */ diff --git a/Xi/xigrabdev.c b/Xi/xigrabdev.c index 7d2733da13..b83d8fecda 100644 --- a/Xi/xigrabdev.c +++ b/Xi/xigrabdev.c @@ -37,6 +37,7 @@ #include "dix/dix_priv.h" #include "dix/exevents_priv.h" #include "dix/inpututils_priv.h" +#include "dix/request_priv.h" #include "dix/resource_priv.h" #include "Xi/handlers.h" diff --git a/Xi/xipassivegrab.c b/Xi/xipassivegrab.c index 0aebd05afa..9330f49fea 100644 --- a/Xi/xipassivegrab.c +++ b/Xi/xipassivegrab.c @@ -39,6 +39,7 @@ #include "dix/exevents_priv.h" #include "dix/inpututils_priv.h" #include "dix/rpcbuf_priv.h" +#include "dix/request_priv.h" #include "Xi/handlers.h" #include "inputstr.h" /* DeviceIntPtr */ diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c index 7f95896da5..bb092b2248 100644 --- a/Xi/xiproperty.c +++ b/Xi/xiproperty.c @@ -36,6 +36,7 @@ #include "dix/exevents_priv.h" #include "dix/extension_priv.h" #include "dix/input_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "Xi/handlers.h" diff --git a/Xi/xiquerydevice.c b/Xi/xiquerydevice.c index 26c3ad09fa..f0302dbf0a 100644 --- a/Xi/xiquerydevice.c +++ b/Xi/xiquerydevice.c @@ -38,6 +38,7 @@ #include "dix/exevents_priv.h" #include "dix/input_priv.h" #include "dix/inpututils_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "os/fmt.h" #include "Xi/handlers.h" diff --git a/Xi/xiquerypointer.c b/Xi/xiquerypointer.c index 962a24707f..3ebc46e133 100644 --- a/Xi/xiquerypointer.c +++ b/Xi/xiquerypointer.c @@ -41,6 +41,7 @@ #include "dix/exevents_priv.h" #include "dix/input_priv.h" #include "dix/inpututils_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "dix/screenint_priv.h" #include "os/fmt.h" diff --git a/Xi/xiqueryversion.c b/Xi/xiqueryversion.c index be2e3113c6..79db704c51 100644 --- a/Xi/xiqueryversion.c +++ b/Xi/xiqueryversion.c @@ -37,6 +37,7 @@ #include "dix/dix_priv.h" #include "dix/exevents_priv.h" +#include "dix/request_priv.h" #include "os/fmt.h" #include "Xi/handlers.h" diff --git a/Xi/xiselectev.c b/Xi/xiselectev.c index d07454f979..b2af7410a3 100644 --- a/Xi/xiselectev.c +++ b/Xi/xiselectev.c @@ -30,6 +30,7 @@ #include "dix/dix_priv.h" #include "dix/exevents_priv.h" #include "dix/inpututils_priv.h" +#include "dix/request_priv.h" #include "dix/resource_priv.h" #include "Xi/handlers.h" diff --git a/Xi/xisetdevfocus.c b/Xi/xisetdevfocus.c index 0c079328d0..22dfd711ce 100644 --- a/Xi/xisetdevfocus.c +++ b/Xi/xisetdevfocus.c @@ -34,6 +34,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "Xi/handlers.h" #include "inputstr.h" /* DeviceIntPtr */ diff --git a/composite/compext.c b/composite/compext.c index 421f7e627b..22de9d7a25 100644 --- a/composite/compext.c +++ b/composite/compext.c @@ -44,6 +44,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/screenint_priv.h" #include "miext/extinit_priv.h" #include "Xext/panoramiXsrv.h" diff --git a/dbe/dbe.c b/dbe/dbe.c index 59beab761c..758cc9f8ca 100644 --- a/dbe/dbe.c +++ b/dbe/dbe.c @@ -38,6 +38,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "dix/screen_hooks_priv.h" #include "miext/extinit_priv.h" diff --git a/dix/devices.c b/dix/devices.c index 49cf3f5dd2..16c4936aa1 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -60,6 +60,7 @@ SOFTWARE. #include "dix/exevents_priv.h" #include "dix/input_priv.h" #include "dix/ptrveloc_priv.h" +#include "dix/request_priv.h" #include "dix/resource_priv.h" #include "dix/screenint_priv.h" #include "mi/mi_priv.h" diff --git a/dix/dispatch.c b/dix/dispatch.c index be79af4d7a..50fdbe79ba 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -111,6 +111,7 @@ Equipment Corporation. #include "dix/input_priv.h" #include "dix/gc_priv.h" #include "dix/registry_priv.h" +#include "dix/request_priv.h" #include "dix/resource_priv.h" #include "dix/screenint_priv.h" #include "dix/selection_priv.h" diff --git a/dix/dix_priv.h b/dix/dix_priv.h index f1d59394a6..aa2b993b1a 100644 --- a/dix/dix_priv.h +++ b/dix/dix_priv.h @@ -700,24 +700,6 @@ static inline ClientPtr dixLookupXIDOwner(XID xid) return NULL; } -/* - * @brief write rpc buffer to client and then clear it - * - * @param pClient the client to write buffer to - * @param rpcbuf the buffer whose contents will be written - * @return the result of WriteToClient() call - */ -static inline ssize_t WriteRpcbufToClient(ClientPtr pClient, - x_rpcbuf_t *rpcbuf) { - /* explicitly casting between (s)size_t and int - should be safe, - since payloads are always small enough to easily fit into int. */ - ssize_t ret = WriteToClient(pClient, - (int)rpcbuf->wpos, - rpcbuf->buffer); - x_rpcbuf_clear(rpcbuf); - return ret; -} - /* * @brief make atom from null-terminated string * @@ -742,76 +724,6 @@ static inline Atom dixGetAtomID(const char *name) { return MakeAtom(name, (unsigned int)strlen(name), FALSE); } -/* compute the amount of extra units a reply header needs. - * - * all reply header structs are at least the size of xGenericReply - * we have to count how many units the header is bigger than xGenericReply - * - */ -#define X_REPLY_HEADER_UNITS(hdrtype) \ - (bytes_to_int32((sizeof(hdrtype) - sizeof(xGenericReply)))) - -static inline int __write_reply_hdr_and_rpcbuf( - ClientPtr pClient, void *hdrData, size_t hdrLen, x_rpcbuf_t *rpcbuf) -{ - if (rpcbuf->error) - return BadAlloc; - - xGenericReply *reply = hdrData; - reply->type = X_Reply; - reply->length = (bytes_to_int32(hdrLen - sizeof(xGenericReply))) - + x_rpcbuf_wsize_units(rpcbuf); - reply->sequenceNumber = (CARD16)pClient->sequence; /* shouldn't go above 64k */ - - if (pClient->swapped) { - swaps(&reply->sequenceNumber); - swapl(&reply->length); - } - - WriteToClient(pClient, (int)hdrLen, hdrData); - WriteRpcbufToClient(pClient, rpcbuf); - - return Success; -} - -static inline int __write_reply_hdr_simple( - ClientPtr pClient, void *hdrData, size_t hdrLen) -{ - xGenericReply *reply = hdrData; - reply->type = X_Reply; - reply->length = (bytes_to_int32(hdrLen - sizeof(xGenericReply))); - reply->sequenceNumber = (CARD16)pClient->sequence; /* shouldn't go above 64k */ - - if (pClient->swapped) { - swaps(&reply->sequenceNumber); - swapl(&reply->length); - } - - WriteToClient(pClient, (int)hdrLen, hdrData); - return Success; -} - -/* - * send reply with header struct (not pointer!) along with rpcbuf payload - * - * @param client pointer to the client (ClientPtr) - * @param hdrstruct the header struct (not pointer, the struct itself!) - * @param rpcbuf the rpcbuf to send (not pointer, the struct itself!) - * return X11 result code - */ -#define X_SEND_REPLY_WITH_RPCBUF(client, hdrstruct, rpcbuf) \ - __write_reply_hdr_and_rpcbuf(client, &(hdrstruct), sizeof(hdrstruct), &(rpcbuf)); - -/* - * send reply with header struct (not pointer!) without any payload - * - * @param client pointer to the client (ClientPtr) - * @param hdrstruct the header struct (not pointer, the struct itself!) - * @return X11 result code (=Success) - */ -#define X_SEND_REPLY_SIMPLE(client, hdrstruct) \ - __write_reply_hdr_simple(client, &(hdrstruct), sizeof(hdrstruct)); - /* * transmit raw event into client's buffer * the struct already needs to be filled with all on-wire data, and diff --git a/dix/dixfonts.c b/dix/dixfonts.c index 6c2a15f85a..b8f0923c56 100644 --- a/dix/dixfonts.c +++ b/dix/dixfonts.c @@ -59,6 +59,7 @@ Equipment Corporation. #include "dix/dix_priv.h" #include "dix/gc_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "dix/screenint_priv.h" #include "include/swaprep.h" diff --git a/dix/events.c b/dix/events.c index 2e1351b62c..94077140e9 100644 --- a/dix/events.c +++ b/dix/events.c @@ -127,6 +127,7 @@ Equipment Corporation. #include "dix/input_priv.h" #include "dix/inpututils_priv.h" #include "dix/reqhandlers_priv.h" +#include "dix/request_priv.h" #include "dix/resource_priv.h" #include "dix/screenint_priv.h" #include "dix/window_priv.h" diff --git a/dix/extension.c b/dix/extension.c index 07d65dc355..d41a5d8f17 100644 --- a/dix/extension.c +++ b/dix/extension.c @@ -52,6 +52,7 @@ SOFTWARE. #include "dix/dix_priv.h" #include "dix/extension_priv.h" #include "dix/registry_priv.h" +#include "dix/request_priv.h" #include "misc.h" #include "dixstruct.h" diff --git a/dix/property.c b/dix/property.c index 900f41281f..f24473d7fb 100644 --- a/dix/property.c +++ b/dix/property.c @@ -52,6 +52,7 @@ SOFTWARE. #include "dix/dix_priv.h" #include "dix/input_priv.h" #include "dix/property_priv.h" +#include "dix/request_priv.h" #include "dix/window_priv.h" #include "Xext/panoramiX.h" #include "Xext/panoramiXsrv.h" diff --git a/dix/request_priv.h b/dix/request_priv.h new file mode 100644 index 0000000000..73ac303454 --- /dev/null +++ b/dix/request_priv.h @@ -0,0 +1,104 @@ +/* SPDX-License-Identifier: MIT OR X11 + * + * Copyright © 2024 Enrico Weigelt, metux IT consult + */ +#ifndef _XSERVER_DIX_REQUEST_PRIV_H +#define _XSERVER_DIX_REQUEST_PRIV_H + +#include + +#include "dix/rpcbuf_priv.h" /* x_rpcbuf_t */ +#include "include/dix.h" +#include "include/dixstruct.h" +#include "include/misc.h" /* bytes_to_int32 */ +#include "include/os.h" /* WriteToClient */ + +/* + * @brief write rpc buffer to client and then clear it + * + * @param pClient the client to write buffer to + * @param rpcbuf the buffer whose contents will be written + * @return the result of WriteToClient() call + */ +static inline ssize_t WriteRpcbufToClient(ClientPtr pClient, + x_rpcbuf_t *rpcbuf) { + /* explicitly casting between (s)size_t and int - should be safe, + since payloads are always small enough to easily fit into int. */ + ssize_t ret = WriteToClient(pClient, + (int)rpcbuf->wpos, + rpcbuf->buffer); + x_rpcbuf_clear(rpcbuf); + return ret; +} + +/* compute the amount of extra units a reply header needs. + * + * all reply header structs are at least the size of xGenericReply + * we have to count how many units the header is bigger than xGenericReply + * + */ +#define X_REPLY_HEADER_UNITS(hdrtype) \ + (bytes_to_int32((sizeof(hdrtype) - sizeof(xGenericReply)))) + +static inline int __write_reply_hdr_and_rpcbuf( + ClientPtr pClient, void *hdrData, size_t hdrLen, x_rpcbuf_t *rpcbuf) +{ + if (rpcbuf->error) + return BadAlloc; + + xGenericReply *reply = hdrData; + reply->type = X_Reply; + reply->length = (bytes_to_int32(hdrLen - sizeof(xGenericReply))) + + x_rpcbuf_wsize_units(rpcbuf); + reply->sequenceNumber = (CARD16)pClient->sequence; /* shouldn't go above 64k */ + + if (pClient->swapped) { + swaps(&reply->sequenceNumber); + swapl(&reply->length); + } + + WriteToClient(pClient, (int)hdrLen, hdrData); + WriteRpcbufToClient(pClient, rpcbuf); + + return Success; +} + +static inline int __write_reply_hdr_simple( + ClientPtr pClient, void *hdrData, size_t hdrLen) +{ + xGenericReply *reply = hdrData; + reply->type = X_Reply; + reply->length = (bytes_to_int32(hdrLen - sizeof(xGenericReply))); + reply->sequenceNumber = (CARD16)pClient->sequence; /* shouldn't go above 64k */ + + if (pClient->swapped) { + swaps(&reply->sequenceNumber); + swapl(&reply->length); + } + + WriteToClient(pClient, (int)hdrLen, hdrData); + return Success; +} + +/* + * send reply with header struct (not pointer!) along with rpcbuf payload + * + * @param client pointer to the client (ClientPtr) + * @param hdrstruct the header struct (not pointer, the struct itself!) + * @param rpcbuf the rpcbuf to send (not pointer, the struct itself!) + * return X11 result code + */ +#define X_SEND_REPLY_WITH_RPCBUF(client, hdrstruct, rpcbuf) \ + __write_reply_hdr_and_rpcbuf(client, &(hdrstruct), sizeof(hdrstruct), &(rpcbuf)); + +/* + * send reply with header struct (not pointer!) without any payload + * + * @param client pointer to the client (ClientPtr) + * @param hdrstruct the header struct (not pointer, the struct itself!) + * @return X11 result code (=Success) + */ +#define X_SEND_REPLY_SIMPLE(client, hdrstruct) \ + __write_reply_hdr_simple(client, &(hdrstruct), sizeof(hdrstruct)); + +#endif /* _XSERVER_DIX_REQUEST_PRIV_H */ diff --git a/dix/selection.c b/dix/selection.c index 327674f9be..0b8b84095a 100644 --- a/dix/selection.c +++ b/dix/selection.c @@ -47,6 +47,7 @@ SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/selection_priv.h" #include "windowstr.h" diff --git a/dix/window.c b/dix/window.c index d0f1ca0543..3eb17d380a 100644 --- a/dix/window.c +++ b/dix/window.c @@ -106,6 +106,7 @@ Equipment Corporation. #include "dix/input_priv.h" #include "dix/inpututils_priv.h" #include "dix/property_priv.h" +#include "dix/request_priv.h" #include "dix/resource_priv.h" #include "dix/screenint_priv.h" #include "dix/selection_priv.h" diff --git a/dri3/dri3_request.c b/dri3/dri3_request.c index 5ef81406cd..cc58884784 100644 --- a/dri3/dri3_request.c +++ b/dri3/dri3_request.c @@ -24,6 +24,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "os/client_priv.h" #include "dri3_priv.h" diff --git a/glx/glxcmds.c b/glx/glxcmds.c index b16dad9225..21d446300b 100644 --- a/glx/glxcmds.c +++ b/glx/glxcmds.c @@ -37,6 +37,7 @@ #include "dix/dix_priv.h" #include "dix/resource_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "os/bug_priv.h" diff --git a/glx/indirect_program.c b/glx/indirect_program.c index 1f10c41a79..0f47a8a79f 100644 --- a/glx/indirect_program.c +++ b/glx/indirect_program.c @@ -30,6 +30,8 @@ */ #include +#include "dix/request_priv.h" + #include "glxserver.h" #include "glxext.h" #include "misc.h" diff --git a/glx/indirect_texture_compression.c b/glx/indirect_texture_compression.c index d45b0a910f..cea922f896 100644 --- a/glx/indirect_texture_compression.c +++ b/glx/indirect_texture_compression.c @@ -24,6 +24,8 @@ */ #include +#include "dix/request_priv.h" + #include "glxserver.h" #include "glxext.h" #include "misc.h" diff --git a/glx/indirect_util.c b/glx/indirect_util.c index b8cd7c6f54..5030e6b1ad 100644 --- a/glx/indirect_util.c +++ b/glx/indirect_util.c @@ -31,6 +31,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "indirect_size.h" diff --git a/glx/single2.c b/glx/single2.c index 5fbf3bc132..0b734b6712 100644 --- a/glx/single2.c +++ b/glx/single2.c @@ -35,6 +35,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "glxserver.h" diff --git a/glx/single2swap.c b/glx/single2swap.c index 545faeec28..fc5caff5a8 100644 --- a/glx/single2swap.c +++ b/glx/single2swap.c @@ -30,6 +30,8 @@ #include +#include "dix/request_priv.h" + #include "glxserver.h" #include "glxutil.h" #include "glxext.h" diff --git a/glx/singlepix.c b/glx/singlepix.c index 95dbf51e79..16f93a6648 100644 --- a/glx/singlepix.c +++ b/glx/singlepix.c @@ -30,6 +30,8 @@ #include +#include "dix/request_priv.h" + #include "glxserver.h" #include "glxext.h" #include "singlesize.h" diff --git a/glx/unpack.h b/glx/unpack.h index ac19b88285..5c58d4db91 100644 --- a/glx/unpack.h +++ b/glx/unpack.h @@ -1,6 +1,8 @@ #ifndef __GLX_unpack_h__ #define __GLX_unpack_h__ +#include "dix/request_priv.h" + /* * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. diff --git a/glx/vndcmds.c b/glx/vndcmds.c index 5674b336f8..2ee446bf46 100644 --- a/glx/vndcmds.c +++ b/glx/vndcmds.c @@ -29,6 +29,8 @@ #include +#include "dix/request_priv.h" + #include "hashtable.h" #include "vndserver_priv.h" #include "vndservervendor.h" diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c index 8214e58a98..61ec4d52bb 100644 --- a/hw/xfree86/common/xf86DGA.c +++ b/hw/xfree86/common/xf86DGA.c @@ -50,6 +50,7 @@ #include "dix/dix_priv.h" #include "dix/eventconvert.h" #include "dix/exevents_priv.h" +#include "dix/request_priv.h" #include "dix/screen_hooks_priv.h" #include "mi/mi_priv.h" diff --git a/hw/xfree86/dri/xf86dri.c b/hw/xfree86/dri/xf86dri.c index dcb96a2a4a..1dfbb98b4c 100644 --- a/hw/xfree86/dri/xf86dri.c +++ b/hw/xfree86/dri/xf86dri.c @@ -43,6 +43,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "xf86.h" #include "misc.h" diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c index 5858c0bc61..21deaf68ff 100644 --- a/hw/xfree86/dri2/dri2ext.c +++ b/hw/xfree86/dri2/dri2ext.c @@ -40,6 +40,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dixstruct.h" #include "scrnintstr.h" diff --git a/hw/xquartz/applewm.c b/hw/xquartz/applewm.c index 05a3d35744..dfd3209d4e 100644 --- a/hw/xquartz/applewm.c +++ b/hw/xquartz/applewm.c @@ -36,6 +36,7 @@ #include "dix/dix_priv.h" #include "dix/property_priv.h" +#include "dix/request_priv.h" #include "quartz.h" diff --git a/hw/xquartz/xpr/appledri.c b/hw/xquartz/xpr/appledri.c index 552befb54b..8e01ab5f8e 100644 --- a/hw/xquartz/xpr/appledri.c +++ b/hw/xquartz/xpr/appledri.c @@ -42,6 +42,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "misc.h" #include "dixstruct.h" diff --git a/hw/xwin/dri/windowsdri.c b/hw/xwin/dri/windowsdri.c index a64cfdc802..10edecf040 100644 --- a/hw/xwin/dri/windowsdri.c +++ b/hw/xwin/dri/windowsdri.c @@ -27,6 +27,8 @@ #include #include +#include "dix/request_priv.h" + #include "dixstruct.h" #include "extnsionst.h" #include "scrnintstr.h" diff --git a/present/present_request.c b/present/present_request.c index 8f5814c0b9..c9d4c2a23d 100644 --- a/present/present_request.c +++ b/present/present_request.c @@ -22,6 +22,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dri3/dri3_priv.h" #include "present_priv.h" diff --git a/pseudoramiX/pseudoramiX.c b/pseudoramiX/pseudoramiX.c index 0b09772bce..24982822eb 100644 --- a/pseudoramiX/pseudoramiX.c +++ b/pseudoramiX/pseudoramiX.c @@ -38,6 +38,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "miext/extinit_priv.h" #include "pseudoramiX.h" diff --git a/randr/rrcrtc.c b/randr/rrcrtc.c index e56581b5d8..0699202806 100644 --- a/randr/rrcrtc.c +++ b/randr/rrcrtc.c @@ -25,6 +25,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "randr/randrstr_priv.h" #include "randr/rrdispatch_priv.h" diff --git a/randr/rrdispatch.c b/randr/rrdispatch.c index 6c1cc8fa78..47cd3a266f 100644 --- a/randr/rrdispatch.c +++ b/randr/rrdispatch.c @@ -22,6 +22,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "randr/randrstr_priv.h" #include "randr/rrdispatch_priv.h" #include "os/fmt.h" diff --git a/randr/rrlease.c b/randr/rrlease.c index 442c7389bb..a9a3f84bbd 100644 --- a/randr/rrlease.c +++ b/randr/rrlease.c @@ -24,6 +24,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "randr/randrstr_priv.h" #include "randr/rrdispatch_priv.h" #include "os/client_priv.h" diff --git a/randr/rrmode.c b/randr/rrmode.c index f0590e4bd8..dffccc4cc0 100644 --- a/randr/rrmode.c +++ b/randr/rrmode.c @@ -22,6 +22,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "randr/randrstr_priv.h" #include "randr/rrdispatch_priv.h" diff --git a/randr/rrmonitor.c b/randr/rrmonitor.c index f9af3e9001..659167a926 100644 --- a/randr/rrmonitor.c +++ b/randr/rrmonitor.c @@ -22,6 +22,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "randr/randrstr_priv.h" #include "randr/rrdispatch_priv.h" diff --git a/randr/rroutput.c b/randr/rroutput.c index 6e764a2894..7f32c28a36 100644 --- a/randr/rroutput.c +++ b/randr/rroutput.c @@ -25,6 +25,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "randr/randrstr_priv.h" #include "randr/rrdispatch_priv.h" diff --git a/randr/rrproperty.c b/randr/rrproperty.c index c3cac298fc..a939ce004b 100644 --- a/randr/rrproperty.c +++ b/randr/rrproperty.c @@ -24,6 +24,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "randr/rrdispatch_priv.h" #include "randrstr_priv.h" diff --git a/randr/rrprovider.c b/randr/rrprovider.c index 6c7e9c3248..1286c523aa 100644 --- a/randr/rrprovider.c +++ b/randr/rrprovider.c @@ -27,6 +27,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "randr/randrstr_priv.h" #include "randr/rrdispatch_priv.h" diff --git a/randr/rrproviderproperty.c b/randr/rrproviderproperty.c index c91d2ac301..6a5a349c20 100644 --- a/randr/rrproviderproperty.c +++ b/randr/rrproviderproperty.c @@ -22,6 +22,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "randr/randrstr_priv.h" #include "randr/rrdispatch_priv.h" diff --git a/randr/rrscreen.c b/randr/rrscreen.c index 6c5974f99d..417b7fe930 100644 --- a/randr/rrscreen.c +++ b/randr/rrscreen.c @@ -22,6 +22,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "randr/randrstr_priv.h" #include "randr/rrdispatch_priv.h" diff --git a/randr/rrxinerama.c b/randr/rrxinerama.c index 51dec9d0d4..f6452bd223 100644 --- a/randr/rrxinerama.c +++ b/randr/rrxinerama.c @@ -73,6 +73,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "randr/randrstr_priv.h" #include "swaprep.h" diff --git a/record/record.c b/record/record.c index 723d544880..948b917ffe 100644 --- a/record/record.c +++ b/record/record.c @@ -43,6 +43,7 @@ and Jim Haggerty of Metheus. #include "dix/dix_priv.h" #include "dix/eventconvert.h" #include "dix/input_priv.h" +#include "dix/request_priv.h" #include "dix/resource_priv.h" #include "dix/screenint_priv.h" #include "miext/extinit_priv.h" diff --git a/render/render.c b/render/render.c index ddf402fbfb..23f21d905f 100644 --- a/render/render.c +++ b/render/render.c @@ -34,6 +34,7 @@ #include "dix/colormap_priv.h" #include "dix/cursor_priv.h" #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/screenint_priv.h" #include "miext/extinit_priv.h" #include "os/osdep.h" diff --git a/xfixes/cursor.c b/xfixes/cursor.c index 924f2ec9ea..d16a657301 100644 --- a/xfixes/cursor.c +++ b/xfixes/cursor.c @@ -47,6 +47,7 @@ #include "dix/cursor_priv.h" #include "dix/dix_priv.h" #include "dix/input_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "dix/screen_hooks_priv.h" #include "dix/screenint_priv.h" diff --git a/xfixes/disconnect.c b/xfixes/disconnect.c index 4ed6d813d5..a267ba3398 100644 --- a/xfixes/disconnect.c +++ b/xfixes/disconnect.c @@ -45,6 +45,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "xfixesint.h" diff --git a/xfixes/region.c b/xfixes/region.c index c09d41e5be..2fa79eb9df 100644 --- a/xfixes/region.c +++ b/xfixes/region.c @@ -23,6 +23,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "dix/window_priv.h" #include "render/picturestr_priv.h" diff --git a/xfixes/xfixes.c b/xfixes/xfixes.c index 467a2a5095..f3bf71c5b1 100644 --- a/xfixes/xfixes.c +++ b/xfixes/xfixes.c @@ -45,6 +45,7 @@ #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "miext/extinit_priv.h" #include "os/fmt.h" diff --git a/xkb/xkb.c b/xkb/xkb.c index ee58be230c..2448f38292 100644 --- a/xkb/xkb.c +++ b/xkb/xkb.c @@ -33,6 +33,7 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include "dix/dix_priv.h" +#include "dix/request_priv.h" #include "dix/rpcbuf_priv.h" #include "miext/extinit_priv.h" #include "os/osdep.h"