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