swapreq.c revision 35c4bbdf
1/************************************************************
2
3Copyright 1987, 1998  The Open Group
4
5Permission to use, copy, modify, distribute, and sell this software and its
6documentation for any purpose is hereby granted without fee, provided that
7the above copyright notice appear in all copies and that both that
8copyright notice and this permission notice appear in supporting
9documentation.
10
11The above copyright notice and this permission notice shall be included in
12all copies or substantial portions of the Software.
13
14THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
17OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
21Except as contained in this notice, the name of The Open Group shall not be
22used in advertising or otherwise to promote the sale, use or other dealings
23in this Software without prior written authorization from The Open Group.
24
25Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
26
27                        All Rights Reserved
28
29Permission to use, copy, modify, and distribute this software and its
30documentation for any purpose and without fee is hereby granted,
31provided that the above copyright notice appear in all copies and that
32both that copyright notice and this permission notice appear in
33supporting documentation, and that the name of Digital not be
34used in advertising or publicity pertaining to distribution of the
35software without specific, written prior permission.
36
37DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
38ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
39DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
40ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
41WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
42ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
43SOFTWARE.
44
45********************************************************/
46
47#ifdef HAVE_DIX_CONFIG_H
48#include <dix-config.h>
49#endif
50
51#include <X11/X.h>
52#include <X11/Xproto.h>
53#include <X11/Xprotostr.h>
54#include "misc.h"
55#include "dixstruct.h"
56#include "extnsionst.h"         /* for SendEvent */
57#include "swapreq.h"
58
59/* Thanks to Jack Palevich for testing and subsequently rewriting all this */
60
61/* Byte swap a list of longs */
62void
63SwapLongs(CARD32 *list, unsigned long count)
64{
65    while (count >= 8) {
66        swapl(list + 0);
67        swapl(list + 1);
68        swapl(list + 2);
69        swapl(list + 3);
70        swapl(list + 4);
71        swapl(list + 5);
72        swapl(list + 6);
73        swapl(list + 7);
74        list += 8;
75        count -= 8;
76    }
77    if (count != 0) {
78        do {
79            swapl(list);
80            list++;
81        } while (--count != 0);
82    }
83}
84
85/* Byte swap a list of shorts */
86void
87SwapShorts(short *list, unsigned long count)
88{
89    while (count >= 16) {
90        swaps(list + 0);
91        swaps(list + 1);
92        swaps(list + 2);
93        swaps(list + 3);
94        swaps(list + 4);
95        swaps(list + 5);
96        swaps(list + 6);
97        swaps(list + 7);
98        swaps(list + 8);
99        swaps(list + 9);
100        swaps(list + 10);
101        swaps(list + 11);
102        swaps(list + 12);
103        swaps(list + 13);
104        swaps(list + 14);
105        swaps(list + 15);
106        list += 16;
107        count -= 16;
108    }
109    if (count != 0) {
110        do {
111            swaps(list);
112            list++;
113        } while (--count != 0);
114    }
115}
116
117/* The following is used for all requests that have
118   no fields to be swapped (except "length") */
119int
120SProcSimpleReq(ClientPtr client)
121{
122    REQUEST(xReq);
123    swaps(&stuff->length);
124    return (*ProcVector[stuff->reqType]) (client);
125}
126
127/* The following is used for all requests that have
128   only a single 32-bit field to be swapped, coming
129   right after the "length" field */
130int
131SProcResourceReq(ClientPtr client)
132{
133    REQUEST(xResourceReq);
134    swaps(&stuff->length);
135    REQUEST_AT_LEAST_SIZE(xResourceReq);        /* not EXACT */
136    swapl(&stuff->id);
137    return (*ProcVector[stuff->reqType]) (client);
138}
139
140int
141SProcCreateWindow(ClientPtr client)
142{
143    REQUEST(xCreateWindowReq);
144    swaps(&stuff->length);
145    REQUEST_AT_LEAST_SIZE(xCreateWindowReq);
146    swapl(&stuff->wid);
147    swapl(&stuff->parent);
148    swaps(&stuff->x);
149    swaps(&stuff->y);
150    swaps(&stuff->width);
151    swaps(&stuff->height);
152    swaps(&stuff->borderWidth);
153    swaps(&stuff->class);
154    swapl(&stuff->visual);
155    swapl(&stuff->mask);
156    SwapRestL(stuff);
157    return ((*ProcVector[X_CreateWindow]) (client));
158}
159
160int
161SProcChangeWindowAttributes(ClientPtr client)
162{
163    REQUEST(xChangeWindowAttributesReq);
164    swaps(&stuff->length);
165    REQUEST_AT_LEAST_SIZE(xChangeWindowAttributesReq);
166    swapl(&stuff->window);
167    swapl(&stuff->valueMask);
168    SwapRestL(stuff);
169    return ((*ProcVector[X_ChangeWindowAttributes]) (client));
170}
171
172int
173SProcReparentWindow(ClientPtr client)
174{
175    REQUEST(xReparentWindowReq);
176    swaps(&stuff->length);
177    REQUEST_SIZE_MATCH(xReparentWindowReq);
178    swapl(&stuff->window);
179    swapl(&stuff->parent);
180    swaps(&stuff->x);
181    swaps(&stuff->y);
182    return ((*ProcVector[X_ReparentWindow]) (client));
183}
184
185int
186SProcConfigureWindow(ClientPtr client)
187{
188    REQUEST(xConfigureWindowReq);
189    swaps(&stuff->length);
190    REQUEST_AT_LEAST_SIZE(xConfigureWindowReq);
191    swapl(&stuff->window);
192    swaps(&stuff->mask);
193    SwapRestL(stuff);
194    return ((*ProcVector[X_ConfigureWindow]) (client));
195
196}
197
198int
199SProcInternAtom(ClientPtr client)
200{
201    REQUEST(xInternAtomReq);
202    swaps(&stuff->length);
203    REQUEST_AT_LEAST_SIZE(xInternAtomReq);
204    swaps(&stuff->nbytes);
205    return ((*ProcVector[X_InternAtom]) (client));
206}
207
208int
209SProcChangeProperty(ClientPtr client)
210{
211    REQUEST(xChangePropertyReq);
212    swaps(&stuff->length);
213    REQUEST_AT_LEAST_SIZE(xChangePropertyReq);
214    swapl(&stuff->window);
215    swapl(&stuff->property);
216    swapl(&stuff->type);
217    swapl(&stuff->nUnits);
218    switch (stuff->format) {
219    case 8:
220        break;
221    case 16:
222        SwapRestS(stuff);
223        break;
224    case 32:
225        SwapRestL(stuff);
226        break;
227    }
228    return ((*ProcVector[X_ChangeProperty]) (client));
229}
230
231int
232SProcDeleteProperty(ClientPtr client)
233{
234    REQUEST(xDeletePropertyReq);
235    swaps(&stuff->length);
236    REQUEST_SIZE_MATCH(xDeletePropertyReq);
237    swapl(&stuff->window);
238    swapl(&stuff->property);
239    return ((*ProcVector[X_DeleteProperty]) (client));
240
241}
242
243int
244SProcGetProperty(ClientPtr client)
245{
246    REQUEST(xGetPropertyReq);
247    swaps(&stuff->length);
248    REQUEST_SIZE_MATCH(xGetPropertyReq);
249    swapl(&stuff->window);
250    swapl(&stuff->property);
251    swapl(&stuff->type);
252    swapl(&stuff->longOffset);
253    swapl(&stuff->longLength);
254    return ((*ProcVector[X_GetProperty]) (client));
255}
256
257int
258SProcSetSelectionOwner(ClientPtr client)
259{
260    REQUEST(xSetSelectionOwnerReq);
261    swaps(&stuff->length);
262    REQUEST_SIZE_MATCH(xSetSelectionOwnerReq);
263    swapl(&stuff->window);
264    swapl(&stuff->selection);
265    swapl(&stuff->time);
266    return ((*ProcVector[X_SetSelectionOwner]) (client));
267}
268
269int
270SProcConvertSelection(ClientPtr client)
271{
272    REQUEST(xConvertSelectionReq);
273    swaps(&stuff->length);
274    REQUEST_SIZE_MATCH(xConvertSelectionReq);
275    swapl(&stuff->requestor);
276    swapl(&stuff->selection);
277    swapl(&stuff->target);
278    swapl(&stuff->property);
279    swapl(&stuff->time);
280    return ((*ProcVector[X_ConvertSelection]) (client));
281}
282
283int
284SProcSendEvent(ClientPtr client)
285{
286    xEvent eventT = { .u.u.type = 0 };
287    EventSwapPtr proc;
288
289    REQUEST(xSendEventReq);
290    swaps(&stuff->length);
291    REQUEST_SIZE_MATCH(xSendEventReq);
292    swapl(&stuff->destination);
293    swapl(&stuff->eventMask);
294
295    /* Swap event */
296    proc = EventSwapVector[stuff->event.u.u.type & 0177];
297    if (!proc || proc == NotImplemented)        /* no swapping proc; invalid event type? */
298        return BadValue;
299    (*proc) (&stuff->event, &eventT);
300    stuff->event = eventT;
301
302    return ((*ProcVector[X_SendEvent]) (client));
303}
304
305int
306SProcGrabPointer(ClientPtr client)
307{
308    REQUEST(xGrabPointerReq);
309    swaps(&stuff->length);
310    REQUEST_SIZE_MATCH(xGrabPointerReq);
311    swapl(&stuff->grabWindow);
312    swaps(&stuff->eventMask);
313    swapl(&stuff->confineTo);
314    swapl(&stuff->cursor);
315    swapl(&stuff->time);
316    return ((*ProcVector[X_GrabPointer]) (client));
317}
318
319int
320SProcGrabButton(ClientPtr client)
321{
322    REQUEST(xGrabButtonReq);
323    swaps(&stuff->length);
324    REQUEST_SIZE_MATCH(xGrabButtonReq);
325    swapl(&stuff->grabWindow);
326    swaps(&stuff->eventMask);
327    swapl(&stuff->confineTo);
328    swapl(&stuff->cursor);
329    swaps(&stuff->modifiers);
330    return ((*ProcVector[X_GrabButton]) (client));
331}
332
333int
334SProcUngrabButton(ClientPtr client)
335{
336    REQUEST(xUngrabButtonReq);
337    swaps(&stuff->length);
338    REQUEST_SIZE_MATCH(xUngrabButtonReq);
339    swapl(&stuff->grabWindow);
340    swaps(&stuff->modifiers);
341    return ((*ProcVector[X_UngrabButton]) (client));
342}
343
344int
345SProcChangeActivePointerGrab(ClientPtr client)
346{
347    REQUEST(xChangeActivePointerGrabReq);
348    swaps(&stuff->length);
349    REQUEST_SIZE_MATCH(xChangeActivePointerGrabReq);
350    swapl(&stuff->cursor);
351    swapl(&stuff->time);
352    swaps(&stuff->eventMask);
353    return ((*ProcVector[X_ChangeActivePointerGrab]) (client));
354}
355
356int
357SProcGrabKeyboard(ClientPtr client)
358{
359    REQUEST(xGrabKeyboardReq);
360    swaps(&stuff->length);
361    REQUEST_SIZE_MATCH(xGrabKeyboardReq);
362    swapl(&stuff->grabWindow);
363    swapl(&stuff->time);
364    return ((*ProcVector[X_GrabKeyboard]) (client));
365}
366
367int
368SProcGrabKey(ClientPtr client)
369{
370    REQUEST(xGrabKeyReq);
371    swaps(&stuff->length);
372    REQUEST_SIZE_MATCH(xGrabKeyReq);
373    swapl(&stuff->grabWindow);
374    swaps(&stuff->modifiers);
375    return ((*ProcVector[X_GrabKey]) (client));
376}
377
378int
379SProcUngrabKey(ClientPtr client)
380{
381    REQUEST(xUngrabKeyReq);
382    swaps(&stuff->length);
383    REQUEST_SIZE_MATCH(xUngrabKeyReq);
384    swapl(&stuff->grabWindow);
385    swaps(&stuff->modifiers);
386    return ((*ProcVector[X_UngrabKey]) (client));
387}
388
389int
390SProcGetMotionEvents(ClientPtr client)
391{
392    REQUEST(xGetMotionEventsReq);
393    swaps(&stuff->length);
394    REQUEST_SIZE_MATCH(xGetMotionEventsReq);
395    swapl(&stuff->window);
396    swapl(&stuff->start);
397    swapl(&stuff->stop);
398    return ((*ProcVector[X_GetMotionEvents]) (client));
399}
400
401int
402SProcTranslateCoords(ClientPtr client)
403{
404    REQUEST(xTranslateCoordsReq);
405    swaps(&stuff->length);
406    REQUEST_SIZE_MATCH(xTranslateCoordsReq);
407    swapl(&stuff->srcWid);
408    swapl(&stuff->dstWid);
409    swaps(&stuff->srcX);
410    swaps(&stuff->srcY);
411    return ((*ProcVector[X_TranslateCoords]) (client));
412}
413
414int
415SProcWarpPointer(ClientPtr client)
416{
417    REQUEST(xWarpPointerReq);
418    swaps(&stuff->length);
419    REQUEST_SIZE_MATCH(xWarpPointerReq);
420    swapl(&stuff->srcWid);
421    swapl(&stuff->dstWid);
422    swaps(&stuff->srcX);
423    swaps(&stuff->srcY);
424    swaps(&stuff->srcWidth);
425    swaps(&stuff->srcHeight);
426    swaps(&stuff->dstX);
427    swaps(&stuff->dstY);
428    return ((*ProcVector[X_WarpPointer]) (client));
429}
430
431int
432SProcSetInputFocus(ClientPtr client)
433{
434    REQUEST(xSetInputFocusReq);
435    swaps(&stuff->length);
436    REQUEST_SIZE_MATCH(xSetInputFocusReq);
437    swapl(&stuff->focus);
438    swapl(&stuff->time);
439    return ((*ProcVector[X_SetInputFocus]) (client));
440}
441
442int
443SProcOpenFont(ClientPtr client)
444{
445    REQUEST(xOpenFontReq);
446    swaps(&stuff->length);
447    REQUEST_AT_LEAST_SIZE(xOpenFontReq);
448    swapl(&stuff->fid);
449    swaps(&stuff->nbytes);
450    return ((*ProcVector[X_OpenFont]) (client));
451}
452
453int
454SProcListFonts(ClientPtr client)
455{
456    REQUEST(xListFontsReq);
457    swaps(&stuff->length);
458    REQUEST_AT_LEAST_SIZE(xListFontsReq);
459    swaps(&stuff->maxNames);
460    swaps(&stuff->nbytes);
461    return ((*ProcVector[X_ListFonts]) (client));
462}
463
464int
465SProcListFontsWithInfo(ClientPtr client)
466{
467    REQUEST(xListFontsWithInfoReq);
468    swaps(&stuff->length);
469    REQUEST_AT_LEAST_SIZE(xListFontsWithInfoReq);
470    swaps(&stuff->maxNames);
471    swaps(&stuff->nbytes);
472    return ((*ProcVector[X_ListFontsWithInfo]) (client));
473}
474
475int
476SProcSetFontPath(ClientPtr client)
477{
478    REQUEST(xSetFontPathReq);
479    swaps(&stuff->length);
480    REQUEST_AT_LEAST_SIZE(xSetFontPathReq);
481    swaps(&stuff->nFonts);
482    return ((*ProcVector[X_SetFontPath]) (client));
483}
484
485int
486SProcCreatePixmap(ClientPtr client)
487{
488    REQUEST(xCreatePixmapReq);
489
490    swaps(&stuff->length);
491    REQUEST_SIZE_MATCH(xCreatePixmapReq);
492    swapl(&stuff->pid);
493    swapl(&stuff->drawable);
494    swaps(&stuff->width);
495    swaps(&stuff->height);
496    return ((*ProcVector[X_CreatePixmap]) (client));
497}
498
499int
500SProcCreateGC(ClientPtr client)
501{
502    REQUEST(xCreateGCReq);
503    swaps(&stuff->length);
504    REQUEST_AT_LEAST_SIZE(xCreateGCReq);
505    swapl(&stuff->gc);
506    swapl(&stuff->drawable);
507    swapl(&stuff->mask);
508    SwapRestL(stuff);
509    return ((*ProcVector[X_CreateGC]) (client));
510}
511
512int
513SProcChangeGC(ClientPtr client)
514{
515    REQUEST(xChangeGCReq);
516    swaps(&stuff->length);
517    REQUEST_AT_LEAST_SIZE(xChangeGCReq);
518    swapl(&stuff->gc);
519    swapl(&stuff->mask);
520    SwapRestL(stuff);
521    return ((*ProcVector[X_ChangeGC]) (client));
522}
523
524int
525SProcCopyGC(ClientPtr client)
526{
527    REQUEST(xCopyGCReq);
528    swaps(&stuff->length);
529    REQUEST_SIZE_MATCH(xCopyGCReq);
530    swapl(&stuff->srcGC);
531    swapl(&stuff->dstGC);
532    swapl(&stuff->mask);
533    return ((*ProcVector[X_CopyGC]) (client));
534}
535
536int
537SProcSetDashes(ClientPtr client)
538{
539    REQUEST(xSetDashesReq);
540    swaps(&stuff->length);
541    REQUEST_AT_LEAST_SIZE(xSetDashesReq);
542    swapl(&stuff->gc);
543    swaps(&stuff->dashOffset);
544    swaps(&stuff->nDashes);
545    return ((*ProcVector[X_SetDashes]) (client));
546
547}
548
549int
550SProcSetClipRectangles(ClientPtr client)
551{
552    REQUEST(xSetClipRectanglesReq);
553    swaps(&stuff->length);
554    REQUEST_AT_LEAST_SIZE(xSetClipRectanglesReq);
555    swapl(&stuff->gc);
556    swaps(&stuff->xOrigin);
557    swaps(&stuff->yOrigin);
558    SwapRestS(stuff);
559    return ((*ProcVector[X_SetClipRectangles]) (client));
560}
561
562int
563SProcClearToBackground(ClientPtr client)
564{
565    REQUEST(xClearAreaReq);
566    swaps(&stuff->length);
567    REQUEST_SIZE_MATCH(xClearAreaReq);
568    swapl(&stuff->window);
569    swaps(&stuff->x);
570    swaps(&stuff->y);
571    swaps(&stuff->width);
572    swaps(&stuff->height);
573    return ((*ProcVector[X_ClearArea]) (client));
574}
575
576int
577SProcCopyArea(ClientPtr client)
578{
579    REQUEST(xCopyAreaReq);
580    swaps(&stuff->length);
581    REQUEST_SIZE_MATCH(xCopyAreaReq);
582    swapl(&stuff->srcDrawable);
583    swapl(&stuff->dstDrawable);
584    swapl(&stuff->gc);
585    swaps(&stuff->srcX);
586    swaps(&stuff->srcY);
587    swaps(&stuff->dstX);
588    swaps(&stuff->dstY);
589    swaps(&stuff->width);
590    swaps(&stuff->height);
591    return ((*ProcVector[X_CopyArea]) (client));
592}
593
594int
595SProcCopyPlane(ClientPtr client)
596{
597    REQUEST(xCopyPlaneReq);
598    swaps(&stuff->length);
599    REQUEST_SIZE_MATCH(xCopyPlaneReq);
600    swapl(&stuff->srcDrawable);
601    swapl(&stuff->dstDrawable);
602    swapl(&stuff->gc);
603    swaps(&stuff->srcX);
604    swaps(&stuff->srcY);
605    swaps(&stuff->dstX);
606    swaps(&stuff->dstY);
607    swaps(&stuff->width);
608    swaps(&stuff->height);
609    swapl(&stuff->bitPlane);
610    return ((*ProcVector[X_CopyPlane]) (client));
611}
612
613/* The following routine is used for all Poly drawing requests
614   (except FillPoly, which uses a different request format) */
615int
616SProcPoly(ClientPtr client)
617{
618    REQUEST(xPolyPointReq);
619    swaps(&stuff->length);
620    REQUEST_AT_LEAST_SIZE(xPolyPointReq);
621    swapl(&stuff->drawable);
622    swapl(&stuff->gc);
623    SwapRestS(stuff);
624    return ((*ProcVector[stuff->reqType]) (client));
625}
626
627/* cannot use SProcPoly for this one, because xFillPolyReq
628   is longer than xPolyPointReq, and we don't want to swap
629   the difference as shorts! */
630int
631SProcFillPoly(ClientPtr client)
632{
633    REQUEST(xFillPolyReq);
634    swaps(&stuff->length);
635    REQUEST_AT_LEAST_SIZE(xFillPolyReq);
636    swapl(&stuff->drawable);
637    swapl(&stuff->gc);
638    SwapRestS(stuff);
639    return ((*ProcVector[X_FillPoly]) (client));
640}
641
642int
643SProcPutImage(ClientPtr client)
644{
645    REQUEST(xPutImageReq);
646    swaps(&stuff->length);
647    REQUEST_AT_LEAST_SIZE(xPutImageReq);
648    swapl(&stuff->drawable);
649    swapl(&stuff->gc);
650    swaps(&stuff->width);
651    swaps(&stuff->height);
652    swaps(&stuff->dstX);
653    swaps(&stuff->dstY);
654    /* Image should already be swapped */
655    return ((*ProcVector[X_PutImage]) (client));
656
657}
658
659int
660SProcGetImage(ClientPtr client)
661{
662    REQUEST(xGetImageReq);
663    swaps(&stuff->length);
664    REQUEST_SIZE_MATCH(xGetImageReq);
665    swapl(&stuff->drawable);
666    swaps(&stuff->x);
667    swaps(&stuff->y);
668    swaps(&stuff->width);
669    swaps(&stuff->height);
670    swapl(&stuff->planeMask);
671    return ((*ProcVector[X_GetImage]) (client));
672}
673
674/* ProcPolyText used for both PolyText8 and PolyText16 */
675
676int
677SProcPolyText(ClientPtr client)
678{
679    REQUEST(xPolyTextReq);
680    swaps(&stuff->length);
681    REQUEST_AT_LEAST_SIZE(xPolyTextReq);
682    swapl(&stuff->drawable);
683    swapl(&stuff->gc);
684    swaps(&stuff->x);
685    swaps(&stuff->y);
686    return ((*ProcVector[stuff->reqType]) (client));
687}
688
689/* ProcImageText used for both ImageText8 and ImageText16 */
690
691int
692SProcImageText(ClientPtr client)
693{
694    REQUEST(xImageTextReq);
695    swaps(&stuff->length);
696    REQUEST_AT_LEAST_SIZE(xImageTextReq);
697    swapl(&stuff->drawable);
698    swapl(&stuff->gc);
699    swaps(&stuff->x);
700    swaps(&stuff->y);
701    return ((*ProcVector[stuff->reqType]) (client));
702}
703
704int
705SProcCreateColormap(ClientPtr client)
706{
707    REQUEST(xCreateColormapReq);
708    swaps(&stuff->length);
709    REQUEST_SIZE_MATCH(xCreateColormapReq);
710    swapl(&stuff->mid);
711    swapl(&stuff->window);
712    swapl(&stuff->visual);
713    return ((*ProcVector[X_CreateColormap]) (client));
714}
715
716int
717SProcCopyColormapAndFree(ClientPtr client)
718{
719    REQUEST(xCopyColormapAndFreeReq);
720    swaps(&stuff->length);
721    REQUEST_SIZE_MATCH(xCopyColormapAndFreeReq);
722    swapl(&stuff->mid);
723    swapl(&stuff->srcCmap);
724    return ((*ProcVector[X_CopyColormapAndFree]) (client));
725
726}
727
728int
729SProcAllocColor(ClientPtr client)
730{
731    REQUEST(xAllocColorReq);
732    swaps(&stuff->length);
733    REQUEST_SIZE_MATCH(xAllocColorReq);
734    swapl(&stuff->cmap);
735    swaps(&stuff->red);
736    swaps(&stuff->green);
737    swaps(&stuff->blue);
738    return ((*ProcVector[X_AllocColor]) (client));
739}
740
741int
742SProcAllocNamedColor(ClientPtr client)
743{
744    REQUEST(xAllocNamedColorReq);
745    swaps(&stuff->length);
746    REQUEST_AT_LEAST_SIZE(xAllocNamedColorReq);
747    swapl(&stuff->cmap);
748    swaps(&stuff->nbytes);
749    return ((*ProcVector[X_AllocNamedColor]) (client));
750}
751
752int
753SProcAllocColorCells(ClientPtr client)
754{
755    REQUEST(xAllocColorCellsReq);
756    swaps(&stuff->length);
757    REQUEST_SIZE_MATCH(xAllocColorCellsReq);
758    swapl(&stuff->cmap);
759    swaps(&stuff->colors);
760    swaps(&stuff->planes);
761    return ((*ProcVector[X_AllocColorCells]) (client));
762}
763
764int
765SProcAllocColorPlanes(ClientPtr client)
766{
767    REQUEST(xAllocColorPlanesReq);
768    swaps(&stuff->length);
769    REQUEST_SIZE_MATCH(xAllocColorPlanesReq);
770    swapl(&stuff->cmap);
771    swaps(&stuff->colors);
772    swaps(&stuff->red);
773    swaps(&stuff->green);
774    swaps(&stuff->blue);
775    return ((*ProcVector[X_AllocColorPlanes]) (client));
776}
777
778int
779SProcFreeColors(ClientPtr client)
780{
781    REQUEST(xFreeColorsReq);
782    swaps(&stuff->length);
783    REQUEST_AT_LEAST_SIZE(xFreeColorsReq);
784    swapl(&stuff->cmap);
785    swapl(&stuff->planeMask);
786    SwapRestL(stuff);
787    return ((*ProcVector[X_FreeColors]) (client));
788
789}
790
791void
792SwapColorItem(xColorItem * pItem)
793{
794    swapl(&pItem->pixel);
795    swaps(&pItem->red);
796    swaps(&pItem->green);
797    swaps(&pItem->blue);
798}
799
800int
801SProcStoreColors(ClientPtr client)
802{
803    long count;
804    xColorItem *pItem;
805
806    REQUEST(xStoreColorsReq);
807    swaps(&stuff->length);
808    REQUEST_AT_LEAST_SIZE(xStoreColorsReq);
809    swapl(&stuff->cmap);
810    pItem = (xColorItem *) &stuff[1];
811    for (count = LengthRestB(stuff) / sizeof(xColorItem); --count >= 0;)
812        SwapColorItem(pItem++);
813    return ((*ProcVector[X_StoreColors]) (client));
814}
815
816int
817SProcStoreNamedColor(ClientPtr client)
818{
819    REQUEST(xStoreNamedColorReq);
820    swaps(&stuff->length);
821    REQUEST_AT_LEAST_SIZE(xStoreNamedColorReq);
822    swapl(&stuff->cmap);
823    swapl(&stuff->pixel);
824    swaps(&stuff->nbytes);
825    return ((*ProcVector[X_StoreNamedColor]) (client));
826}
827
828int
829SProcQueryColors(ClientPtr client)
830{
831    REQUEST(xQueryColorsReq);
832    swaps(&stuff->length);
833    REQUEST_AT_LEAST_SIZE(xQueryColorsReq);
834    swapl(&stuff->cmap);
835    SwapRestL(stuff);
836    return ((*ProcVector[X_QueryColors]) (client));
837}
838
839int
840SProcLookupColor(ClientPtr client)
841{
842    REQUEST(xLookupColorReq);
843    swaps(&stuff->length);
844    REQUEST_AT_LEAST_SIZE(xLookupColorReq);
845    swapl(&stuff->cmap);
846    swaps(&stuff->nbytes);
847    return ((*ProcVector[X_LookupColor]) (client));
848}
849
850int
851SProcCreateCursor(ClientPtr client)
852{
853    REQUEST(xCreateCursorReq);
854    swaps(&stuff->length);
855    REQUEST_SIZE_MATCH(xCreateCursorReq);
856    swapl(&stuff->cid);
857    swapl(&stuff->source);
858    swapl(&stuff->mask);
859    swaps(&stuff->foreRed);
860    swaps(&stuff->foreGreen);
861    swaps(&stuff->foreBlue);
862    swaps(&stuff->backRed);
863    swaps(&stuff->backGreen);
864    swaps(&stuff->backBlue);
865    swaps(&stuff->x);
866    swaps(&stuff->y);
867    return ((*ProcVector[X_CreateCursor]) (client));
868}
869
870int
871SProcCreateGlyphCursor(ClientPtr client)
872{
873    REQUEST(xCreateGlyphCursorReq);
874    swaps(&stuff->length);
875    REQUEST_SIZE_MATCH(xCreateGlyphCursorReq);
876    swapl(&stuff->cid);
877    swapl(&stuff->source);
878    swapl(&stuff->mask);
879    swaps(&stuff->sourceChar);
880    swaps(&stuff->maskChar);
881    swaps(&stuff->foreRed);
882    swaps(&stuff->foreGreen);
883    swaps(&stuff->foreBlue);
884    swaps(&stuff->backRed);
885    swaps(&stuff->backGreen);
886    swaps(&stuff->backBlue);
887    return ((*ProcVector[X_CreateGlyphCursor]) (client));
888}
889
890int
891SProcRecolorCursor(ClientPtr client)
892{
893    REQUEST(xRecolorCursorReq);
894    swaps(&stuff->length);
895    REQUEST_SIZE_MATCH(xRecolorCursorReq);
896    swapl(&stuff->cursor);
897    swaps(&stuff->foreRed);
898    swaps(&stuff->foreGreen);
899    swaps(&stuff->foreBlue);
900    swaps(&stuff->backRed);
901    swaps(&stuff->backGreen);
902    swaps(&stuff->backBlue);
903    return ((*ProcVector[X_RecolorCursor]) (client));
904}
905
906int
907SProcQueryBestSize(ClientPtr client)
908{
909    REQUEST(xQueryBestSizeReq);
910    swaps(&stuff->length);
911    REQUEST_SIZE_MATCH(xQueryBestSizeReq);
912    swapl(&stuff->drawable);
913    swaps(&stuff->width);
914    swaps(&stuff->height);
915    return ((*ProcVector[X_QueryBestSize]) (client));
916
917}
918
919int
920SProcQueryExtension(ClientPtr client)
921{
922    REQUEST(xQueryExtensionReq);
923    swaps(&stuff->length);
924    REQUEST_AT_LEAST_SIZE(xQueryExtensionReq);
925    swaps(&stuff->nbytes);
926    return ((*ProcVector[X_QueryExtension]) (client));
927}
928
929int
930SProcChangeKeyboardMapping(ClientPtr client)
931{
932    REQUEST(xChangeKeyboardMappingReq);
933    swaps(&stuff->length);
934    REQUEST_AT_LEAST_SIZE(xChangeKeyboardMappingReq);
935    SwapRestL(stuff);
936    return ((*ProcVector[X_ChangeKeyboardMapping]) (client));
937}
938
939int
940SProcChangeKeyboardControl(ClientPtr client)
941{
942    REQUEST(xChangeKeyboardControlReq);
943    swaps(&stuff->length);
944    REQUEST_AT_LEAST_SIZE(xChangeKeyboardControlReq);
945    swapl(&stuff->mask);
946    SwapRestL(stuff);
947    return ((*ProcVector[X_ChangeKeyboardControl]) (client));
948}
949
950int
951SProcChangePointerControl(ClientPtr client)
952{
953    REQUEST(xChangePointerControlReq);
954    swaps(&stuff->length);
955    REQUEST_SIZE_MATCH(xChangePointerControlReq);
956    swaps(&stuff->accelNum);
957    swaps(&stuff->accelDenum);
958    swaps(&stuff->threshold);
959    return ((*ProcVector[X_ChangePointerControl]) (client));
960}
961
962int
963SProcSetScreenSaver(ClientPtr client)
964{
965    REQUEST(xSetScreenSaverReq);
966    swaps(&stuff->length);
967    REQUEST_SIZE_MATCH(xSetScreenSaverReq);
968    swaps(&stuff->timeout);
969    swaps(&stuff->interval);
970    return ((*ProcVector[X_SetScreenSaver]) (client));
971}
972
973int
974SProcChangeHosts(ClientPtr client)
975{
976    REQUEST(xChangeHostsReq);
977    swaps(&stuff->length);
978    REQUEST_AT_LEAST_SIZE(xChangeHostsReq);
979    swaps(&stuff->hostLength);
980    return ((*ProcVector[X_ChangeHosts]) (client));
981
982}
983
984int
985SProcRotateProperties(ClientPtr client)
986{
987    REQUEST(xRotatePropertiesReq);
988    swaps(&stuff->length);
989    REQUEST_AT_LEAST_SIZE(xRotatePropertiesReq);
990    swapl(&stuff->window);
991    swaps(&stuff->nAtoms);
992    swaps(&stuff->nPositions);
993    SwapRestL(stuff);
994    return ((*ProcVector[X_RotateProperties]) (client));
995}
996
997int
998SProcNoOperation(ClientPtr client)
999{
1000    REQUEST(xReq);
1001    swaps(&stuff->length);
1002    return ((*ProcVector[X_NoOperation]) (client));
1003}
1004
1005void
1006SwapConnClientPrefix(xConnClientPrefix * pCCP)
1007{
1008    swaps(&pCCP->majorVersion);
1009    swaps(&pCCP->minorVersion);
1010    swaps(&pCCP->nbytesAuthProto);
1011    swaps(&pCCP->nbytesAuthString);
1012}
1013