Sun Jul 19 23:23:18 2015 UTC ()
merge libXxf86vm 1.1.4.


(mrg)
diff -r1.3 -r1.4 xsrc/external/mit/libXxf86vm/dist/src/XF86VMode.c

cvs diff -r1.3 -r1.4 xsrc/external/mit/libXxf86vm/dist/src/XF86VMode.c (expand / switch to unified diff)

--- xsrc/external/mit/libXxf86vm/dist/src/XF86VMode.c 2013/06/03 04:37:59 1.3
+++ xsrc/external/mit/libXxf86vm/dist/src/XF86VMode.c 2015/07/19 23:23:18 1.4
@@ -31,37 +31,26 @@ from Kaleb S. KEITHLEY. @@ -31,37 +31,26 @@ from Kaleb S. KEITHLEY.
31/* THIS IS NOT AN X CONSORTIUM STANDARD */ 31/* THIS IS NOT AN X CONSORTIUM STANDARD */
32 32
33#ifdef HAVE_CONFIG_H 33#ifdef HAVE_CONFIG_H
34#include <config.h> 34#include <config.h>
35#endif 35#endif
36 36
37#include <X11/Xlibint.h> 37#include <X11/Xlibint.h>
38#include <X11/extensions/xf86vmproto.h> 38#include <X11/extensions/xf86vmproto.h>
39#include <X11/extensions/xf86vmode.h> 39#include <X11/extensions/xf86vmode.h>
40#include <X11/extensions/Xext.h> 40#include <X11/extensions/Xext.h>
41#include <X11/extensions/extutil.h> 41#include <X11/extensions/extutil.h>
42#include <limits.h> 42#include <limits.h>
43 43
44#ifndef HAVE__XEATDATAWORDS 
45static inline void _XEatDataWords(Display *dpy, unsigned long n) 
46{ 
47# ifndef LONG64 
48 if (n >= (ULONG_MAX >> 2)) 
49 _XIOError(dpy); 
50# endif 
51 _XEatData (dpy, n << 2); 
52} 
53#endif 
54 
55#ifdef DEBUG 44#ifdef DEBUG
56#include <stdio.h> 45#include <stdio.h>
57#endif 46#endif
58 47
59#ifndef MODE_BAD 48#ifndef MODE_BAD
60#define MODE_BAD 255 49#define MODE_BAD 255
61#endif 50#endif
62 51
63static XExtensionInfo _xf86vidmode_info_data; 52static XExtensionInfo _xf86vidmode_info_data;
64static XExtensionInfo *xf86vidmode_info = &_xf86vidmode_info_data; 53static XExtensionInfo *xf86vidmode_info = &_xf86vidmode_info_data;
65static const char *xf86vidmode_extension_name = XF86VIDMODENAME; 54static const char *xf86vidmode_extension_name = XF86VIDMODENAME;
66 55
67#define XF86VidModeCheckExtension(dpy,i,val) \ 56#define XF86VidModeCheckExtension(dpy,i,val) \
@@ -205,111 +194,117 @@ XF86VidModeGetGamma(Display *dpy, int sc @@ -205,111 +194,117 @@ XF86VidModeGetGamma(Display *dpy, int sc
205 Gamma->red = ((float)rep.red) / 10000.; 194 Gamma->red = ((float)rep.red) / 10000.;
206 Gamma->green = ((float)rep.green) / 10000.; 195 Gamma->green = ((float)rep.green) / 10000.;
207 Gamma->blue = ((float)rep.blue) / 10000.; 196 Gamma->blue = ((float)rep.blue) / 10000.;
208 UnlockDisplay(dpy); 197 UnlockDisplay(dpy);
209 SyncHandle(); 198 SyncHandle();
210 return True; 199 return True;
211} 200}
212 201
213Bool 202Bool
214XF86VidModeGetModeLine(Display* dpy, int screen, int* dotclock, 203XF86VidModeGetModeLine(Display* dpy, int screen, int* dotclock,
215 XF86VidModeModeLine* modeline) 204 XF86VidModeModeLine* modeline)
216{ 205{
217 XExtDisplayInfo *info = find_display (dpy); 206 XExtDisplayInfo *info = find_display (dpy);
218 xXF86VidModeGetModeLineReply rep; 
219 xXF86OldVidModeGetModeLineReply oldrep; 
220 xXF86VidModeGetModeLineReq *req; 207 xXF86VidModeGetModeLineReq *req;
221 int majorVersion, minorVersion; 208 int majorVersion, minorVersion;
 209 CARD32 remaining_len;
222 Bool result = True; 210 Bool result = True;
223 211
224 XF86VidModeCheckExtension (dpy, info, False); 212 XF86VidModeCheckExtension (dpy, info, False);
225 XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion); 213 XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion);
226 214
227 LockDisplay(dpy); 215 LockDisplay(dpy);
228 GetReq(XF86VidModeGetModeLine, req); 216 GetReq(XF86VidModeGetModeLine, req);
229 req->reqType = info->codes->major_opcode; 217 req->reqType = info->codes->major_opcode;
230 req->xf86vidmodeReqType = X_XF86VidModeGetModeLine; 218 req->xf86vidmodeReqType = X_XF86VidModeGetModeLine;
231 req->screen = screen; 219 req->screen = screen;
232 220
233 if (majorVersion < 2) { 221 if (_X_UNLIKELY(majorVersion < 2)) {
 222 xXF86OldVidModeGetModeLineReply oldrep;
 223
234 if (!_XReply(dpy, (xReply *)&oldrep, 224 if (!_XReply(dpy, (xReply *)&oldrep,
235 (SIZEOF(xXF86OldVidModeGetModeLineReply) - SIZEOF(xReply)) >> 2, xFalse)) { 225 (SIZEOF(xXF86OldVidModeGetModeLineReply) - SIZEOF(xReply)) >> 2, xFalse)) {
236 UnlockDisplay(dpy); 226 UnlockDisplay(dpy);
237 SyncHandle(); 227 SyncHandle();
238 return False; 228 return False;
239 } 229 }
 230 remaining_len = oldrep.length -
 231 ((SIZEOF(xXF86OldVidModeGetModeLineReply) - SIZEOF(xReply)) >> 2);
240 *dotclock = oldrep.dotclock; 232 *dotclock = oldrep.dotclock;
241 modeline->hdisplay = oldrep.hdisplay; 233 modeline->hdisplay = oldrep.hdisplay;
242 modeline->hsyncstart = oldrep.hsyncstart; 234 modeline->hsyncstart = oldrep.hsyncstart;
243 modeline->hsyncend = oldrep.hsyncend; 235 modeline->hsyncend = oldrep.hsyncend;
244 modeline->htotal = oldrep.htotal; 236 modeline->htotal = oldrep.htotal;
245 modeline->hskew = 0; 237 modeline->hskew = 0;
246 modeline->vdisplay = oldrep.vdisplay; 238 modeline->vdisplay = oldrep.vdisplay;
247 modeline->vsyncstart = oldrep.vsyncstart; 239 modeline->vsyncstart = oldrep.vsyncstart;
248 modeline->vsyncend = oldrep.vsyncend; 240 modeline->vsyncend = oldrep.vsyncend;
249 modeline->vtotal = oldrep.vtotal; 241 modeline->vtotal = oldrep.vtotal;
250 modeline->flags = oldrep.flags; 242 modeline->flags = oldrep.flags;
251 modeline->privsize = oldrep.privsize; 243 modeline->privsize = oldrep.privsize;
252 } else { 244 } else {
 245 xXF86VidModeGetModeLineReply rep;
 246
253 if (!_XReply(dpy, (xReply *)&rep, 247 if (!_XReply(dpy, (xReply *)&rep,
254 (SIZEOF(xXF86VidModeGetModeLineReply) - SIZEOF(xReply)) >> 2, xFalse)) { 248 (SIZEOF(xXF86VidModeGetModeLineReply) - SIZEOF(xReply)) >> 2, xFalse)) {
255 UnlockDisplay(dpy); 249 UnlockDisplay(dpy);
256 SyncHandle(); 250 SyncHandle();
257 return False; 251 return False;
258 } 252 }
 253 remaining_len = rep.length -
 254 ((SIZEOF(xXF86VidModeGetModeLineReply) - SIZEOF(xReply)) >> 2);
259 *dotclock = rep.dotclock; 255 *dotclock = rep.dotclock;
260 modeline->hdisplay = rep.hdisplay; 256 modeline->hdisplay = rep.hdisplay;
261 modeline->hsyncstart = rep.hsyncstart; 257 modeline->hsyncstart = rep.hsyncstart;
262 modeline->hsyncend = rep.hsyncend; 258 modeline->hsyncend = rep.hsyncend;
263 modeline->htotal = rep.htotal; 259 modeline->htotal = rep.htotal;
264 modeline->hskew = rep.hskew; 260 modeline->hskew = rep.hskew;
265 modeline->vdisplay = rep.vdisplay; 261 modeline->vdisplay = rep.vdisplay;
266 modeline->vsyncstart = rep.vsyncstart; 262 modeline->vsyncstart = rep.vsyncstart;
267 modeline->vsyncend = rep.vsyncend; 263 modeline->vsyncend = rep.vsyncend;
268 modeline->vtotal = rep.vtotal; 264 modeline->vtotal = rep.vtotal;
269 modeline->flags = rep.flags; 265 modeline->flags = rep.flags;
270 modeline->privsize = rep.privsize; 266 modeline->privsize = rep.privsize;
271 } 267 }
272 268
273 if (modeline->privsize > 0) { 269 if (modeline->privsize > 0) {
274 if (modeline->privsize < (INT_MAX / sizeof(INT32))) 270 if (modeline->privsize < (INT_MAX / sizeof(INT32)))
275 modeline->private = Xcalloc(modeline->privsize, sizeof(INT32)); 271 modeline->private = Xcalloc(modeline->privsize, sizeof(INT32));
276 else 272 else
277 modeline->private = NULL; 273 modeline->private = NULL;
278 if (modeline->private == NULL) { 274 if (modeline->private == NULL) {
279 _XEatDataWords(dpy, rep.length - 275 _XEatDataWords(dpy, remaining_len);
280 ((SIZEOF(xXF86VidModeGetModeLineReply) - SIZEOF(xReply)) >> 2)); 
281 result = False; 276 result = False;
282 } else 277 } else
283 _XRead(dpy, (char*)modeline->private, modeline->privsize * sizeof(INT32)); 278 _XRead(dpy, (char*)modeline->private, modeline->privsize * sizeof(INT32));
284 } else { 279 } else {
285 modeline->private = NULL; 280 modeline->private = NULL;
286 } 281 }
287 UnlockDisplay(dpy); 282 UnlockDisplay(dpy);
288 SyncHandle(); 283 SyncHandle();
289 return result; 284 return result;
290} 285}
291 286
292Bool 287Bool
293XF86VidModeGetAllModeLines(Display* dpy, int screen, int* modecount, 288XF86VidModeGetAllModeLines(Display* dpy, int screen, int* modecount,
294 XF86VidModeModeInfo ***modelinesPtr) 289 XF86VidModeModeInfo ***modelinesPtr)
295{ 290{
296 XExtDisplayInfo *info = find_display (dpy); 291 XExtDisplayInfo *info = find_display (dpy);
297 xXF86VidModeGetAllModeLinesReply rep; 292 xXF86VidModeGetAllModeLinesReply rep;
298 xXF86VidModeGetAllModeLinesReq *req; 293 xXF86VidModeGetAllModeLinesReq *req;
299 XF86VidModeModeInfo *mdinfptr, **modelines; 294 XF86VidModeModeInfo *mdinfptr, **modelines;
300 xXF86VidModeModeInfo xmdline; 295 xXF86VidModeModeInfo xmdline;
301 xXF86OldVidModeModeInfo oldxmdline; 296 xXF86OldVidModeModeInfo oldxmdline;
302 int i; 297 unsigned int i;
303 int majorVersion, minorVersion; 298 int majorVersion, minorVersion;
304 Bool protocolBug = False; 299 Bool protocolBug = False;
305 300
306 XF86VidModeCheckExtension (dpy, info, False); 301 XF86VidModeCheckExtension (dpy, info, False);
307 302
308 /* 303 /*
309 * Note: There was a bug in the protocol implementation in versions 304 * Note: There was a bug in the protocol implementation in versions
310 * 0.x with x < 8 (the .private field wasn't being passed over the wire). 305 * 0.x with x < 8 (the .private field wasn't being passed over the wire).
311 * Check the server's version, and accept the old format if appropriate. 306 * Check the server's version, and accept the old format if appropriate.
312 */ 307 */
313 308
314 XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion); 309 XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion);
315 if (majorVersion == 0 && minorVersion < 8) { 310 if (majorVersion == 0 && minorVersion < 8) {
@@ -341,27 +336,27 @@ XF86VidModeGetAllModeLines(Display* dpy, @@ -341,27 +336,27 @@ XF86VidModeGetAllModeLines(Display* dpy,
341 _XEatDataWords(dpy, rep.length - 336 _XEatDataWords(dpy, rep.length -
342 ((SIZEOF(xXF86VidModeGetAllModeLinesReply) - SIZEOF(xReply)) >> 2)); 337 ((SIZEOF(xXF86VidModeGetAllModeLinesReply) - SIZEOF(xReply)) >> 2));
343 UnlockDisplay(dpy); 338 UnlockDisplay(dpy);
344 SyncHandle(); 339 SyncHandle();
345 return False; 340 return False;
346 } 341 }
347 mdinfptr = (XF86VidModeModeInfo *) ( 342 mdinfptr = (XF86VidModeModeInfo *) (
348 (char *) modelines 343 (char *) modelines
349 + rep.modecount*sizeof(XF86VidModeModeInfo *) 344 + rep.modecount*sizeof(XF86VidModeModeInfo *)
350 ); 345 );
351 346
352 for (i = 0; i < rep.modecount; i++) { 347 for (i = 0; i < rep.modecount; i++) {
353 modelines[i] = mdinfptr++; 348 modelines[i] = mdinfptr++;
354 if (majorVersion < 2) { 349 if (_X_UNLIKELY(majorVersion < 2)) {
355 _XRead(dpy, (char*)&oldxmdline, sizeof(xXF86OldVidModeModeInfo)); 350 _XRead(dpy, (char*)&oldxmdline, sizeof(xXF86OldVidModeModeInfo));
356 modelines[i]->dotclock = oldxmdline.dotclock; 351 modelines[i]->dotclock = oldxmdline.dotclock;
357 modelines[i]->hdisplay = oldxmdline.hdisplay; 352 modelines[i]->hdisplay = oldxmdline.hdisplay;
358 modelines[i]->hsyncstart = oldxmdline.hsyncstart; 353 modelines[i]->hsyncstart = oldxmdline.hsyncstart;
359 modelines[i]->hsyncend = oldxmdline.hsyncend; 354 modelines[i]->hsyncend = oldxmdline.hsyncend;
360 modelines[i]->htotal = oldxmdline.htotal; 355 modelines[i]->htotal = oldxmdline.htotal;
361 modelines[i]->hskew = 0; 356 modelines[i]->hskew = 0;
362 modelines[i]->vdisplay = oldxmdline.vdisplay; 357 modelines[i]->vdisplay = oldxmdline.vdisplay;
363 modelines[i]->vsyncstart = oldxmdline.vsyncstart; 358 modelines[i]->vsyncstart = oldxmdline.vsyncstart;
364 modelines[i]->vsyncend = oldxmdline.vsyncend; 359 modelines[i]->vsyncend = oldxmdline.vsyncend;
365 modelines[i]->vtotal = oldxmdline.vtotal; 360 modelines[i]->vtotal = oldxmdline.vtotal;
366 modelines[i]->flags = oldxmdline.flags; 361 modelines[i]->flags = oldxmdline.flags;
367 if (protocolBug) { 362 if (protocolBug) {
@@ -412,64 +407,51 @@ XF86VidModeGetAllModeLines(Display* dpy, @@ -412,64 +407,51 @@ XF86VidModeGetAllModeLines(Display* dpy,
412 } 407 }
413 } 408 }
414 } 409 }
415 } 410 }
416 *modelinesPtr = modelines; 411 *modelinesPtr = modelines;
417 UnlockDisplay(dpy); 412 UnlockDisplay(dpy);
418 SyncHandle(); 413 SyncHandle();
419 return True; 414 return True;
420} 415}
421 416
422/* 417/*
423 * GetReq replacement for use with VidMode protocols earlier than 2.0 418 * GetReq replacement for use with VidMode protocols earlier than 2.0
424 */ 419 */
425#if !defined(UNIXCPP) || defined(ANSICPP) 
426#define GetOldReq(name, oldname, req) \ 420#define GetOldReq(name, oldname, req) \
427 WORD64ALIGN\ 421 WORD64ALIGN\
428 if ((dpy->bufptr + SIZEOF(x##oldname##Req)) > dpy->bufmax)\ 422 if ((dpy->bufptr + SIZEOF(x##oldname##Req)) > dpy->bufmax)\
429 _XFlush(dpy);\ 423 _XFlush(dpy);\
430 req = (x##oldname##Req *)(dpy->last_req = dpy->bufptr);\ 424 req = (x##oldname##Req *)(dpy->last_req = dpy->bufptr);\
431 req->reqType = X_##name;\ 425 req->reqType = X_##name;\
432 req->length = (SIZEOF(x##oldname##Req))>>2;\ 426 req->length = (SIZEOF(x##oldname##Req))>>2;\
433 dpy->bufptr += SIZEOF(x##oldname##Req);\ 427 dpy->bufptr += SIZEOF(x##oldname##Req);\
434 dpy->request++ 428 dpy->request++
435 429
436#else /* non-ANSI C uses empty comment instead of "##" for token concatenation */ 
437#define GetOldReq(name, oldname, req) \ 
438 WORD64ALIGN\ 
439 if ((dpy->bufptr + SIZEOF(x/**/oldname/**/Req)) > dpy->bufmax)\ 
440 _XFlush(dpy);\ 
441 req = (x/**/oldname/**/Req *)(dpy->last_req = dpy->bufptr);\ 
442 req->reqType = X_/**/name;\ 
443 req->length = (SIZEOF(x/**/oldname/**/Req))>>2;\ 
444 dpy->bufptr += SIZEOF(x/**/oldname/**/Req);\ 
445 dpy->request++ 
446#endif 
447 
448Bool 430Bool
449XF86VidModeAddModeLine(Display *dpy, int screen, 431XF86VidModeAddModeLine(Display *dpy, int screen,
450 XF86VidModeModeInfo* newmodeline, 432 XF86VidModeModeInfo* newmodeline,
451 XF86VidModeModeInfo* aftermodeline) 433 XF86VidModeModeInfo* aftermodeline)
452{ 434{
453 XExtDisplayInfo *info = find_display (dpy); 435 XExtDisplayInfo *info = find_display (dpy);
454 xXF86VidModeAddModeLineReq *req; 436 xXF86VidModeAddModeLineReq *req;
455 xXF86OldVidModeAddModeLineReq *oldreq; 437 xXF86OldVidModeAddModeLineReq *oldreq;
456 int majorVersion, minorVersion; 438 int majorVersion, minorVersion;
457 439
458 XF86VidModeCheckExtension (dpy, info, False); 440 XF86VidModeCheckExtension (dpy, info, False);
459 XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion); 441 XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion);
460 442
461 LockDisplay(dpy); 443 LockDisplay(dpy);
462 if (majorVersion < 2) { 444 if (_X_UNLIKELY(majorVersion < 2)) {
463 GetOldReq(XF86VidModeAddModeLine, XF86OldVidModeAddModeLine, oldreq); 445 GetOldReq(XF86VidModeAddModeLine, XF86OldVidModeAddModeLine, oldreq);
464 oldreq->reqType = info->codes->major_opcode; 446 oldreq->reqType = info->codes->major_opcode;
465 oldreq->xf86vidmodeReqType = X_XF86VidModeAddModeLine; 447 oldreq->xf86vidmodeReqType = X_XF86VidModeAddModeLine;
466 oldreq->screen = screen; 448 oldreq->screen = screen;
467 oldreq->dotclock = newmodeline->dotclock; 449 oldreq->dotclock = newmodeline->dotclock;
468 oldreq->hdisplay = newmodeline->hdisplay; 450 oldreq->hdisplay = newmodeline->hdisplay;
469 oldreq->hsyncstart = newmodeline->hsyncstart; 451 oldreq->hsyncstart = newmodeline->hsyncstart;
470 oldreq->hsyncend = newmodeline->hsyncend; 452 oldreq->hsyncend = newmodeline->hsyncend;
471 oldreq->htotal = newmodeline->htotal; 453 oldreq->htotal = newmodeline->htotal;
472 oldreq->vdisplay = newmodeline->vdisplay; 454 oldreq->vdisplay = newmodeline->vdisplay;
473 oldreq->vsyncstart = newmodeline->vsyncstart; 455 oldreq->vsyncstart = newmodeline->vsyncstart;
474 oldreq->vsyncend = newmodeline->vsyncend; 456 oldreq->vsyncend = newmodeline->vsyncend;
475 oldreq->vtotal = newmodeline->vtotal; 457 oldreq->vtotal = newmodeline->vtotal;
@@ -559,27 +541,27 @@ XF86VidModeAddModeLine(Display *dpy, int @@ -559,27 +541,27 @@ XF86VidModeAddModeLine(Display *dpy, int
559Bool 541Bool
560XF86VidModeDeleteModeLine(Display *dpy, int screen, 542XF86VidModeDeleteModeLine(Display *dpy, int screen,
561 XF86VidModeModeInfo* modeline) 543 XF86VidModeModeInfo* modeline)
562{ 544{
563 XExtDisplayInfo *info = find_display (dpy); 545 XExtDisplayInfo *info = find_display (dpy);
564 xXF86VidModeDeleteModeLineReq *req; 546 xXF86VidModeDeleteModeLineReq *req;
565 xXF86OldVidModeDeleteModeLineReq *oldreq; 547 xXF86OldVidModeDeleteModeLineReq *oldreq;
566 int majorVersion, minorVersion; 548 int majorVersion, minorVersion;
567 549
568 XF86VidModeCheckExtension (dpy, info, 0); 550 XF86VidModeCheckExtension (dpy, info, 0);
569 XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion); 551 XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion);
570 552
571 LockDisplay(dpy); 553 LockDisplay(dpy);
572 if (majorVersion < 2) { 554 if (_X_UNLIKELY(majorVersion < 2)) {
573 GetOldReq(XF86VidModeDeleteModeLine, XF86OldVidModeDeleteModeLine, oldreq); 555 GetOldReq(XF86VidModeDeleteModeLine, XF86OldVidModeDeleteModeLine, oldreq);
574 oldreq->reqType = info->codes->major_opcode; 556 oldreq->reqType = info->codes->major_opcode;
575 oldreq->xf86vidmodeReqType = X_XF86VidModeDeleteModeLine; 557 oldreq->xf86vidmodeReqType = X_XF86VidModeDeleteModeLine;
576 oldreq->screen = screen; 558 oldreq->screen = screen;
577 oldreq->dotclock = modeline->dotclock; 559 oldreq->dotclock = modeline->dotclock;
578 oldreq->hdisplay = modeline->hdisplay; 560 oldreq->hdisplay = modeline->hdisplay;
579 oldreq->hsyncstart = modeline->hsyncstart; 561 oldreq->hsyncstart = modeline->hsyncstart;
580 oldreq->hsyncend = modeline->hsyncend; 562 oldreq->hsyncend = modeline->hsyncend;
581 oldreq->htotal = modeline->htotal; 563 oldreq->htotal = modeline->htotal;
582 oldreq->vdisplay = modeline->vdisplay; 564 oldreq->vdisplay = modeline->vdisplay;
583 oldreq->vsyncstart = modeline->vsyncstart; 565 oldreq->vsyncstart = modeline->vsyncstart;
584 oldreq->vsyncend = modeline->vsyncend; 566 oldreq->vsyncend = modeline->vsyncend;
585 oldreq->vtotal = modeline->vtotal; 567 oldreq->vtotal = modeline->vtotal;
@@ -620,27 +602,27 @@ XF86VidModeDeleteModeLine(Display *dpy,  @@ -620,27 +602,27 @@ XF86VidModeDeleteModeLine(Display *dpy,
620 602
621Bool 603Bool
622XF86VidModeModModeLine(Display *dpy, int screen, XF86VidModeModeLine* modeline) 604XF86VidModeModModeLine(Display *dpy, int screen, XF86VidModeModeLine* modeline)
623{ 605{
624 XExtDisplayInfo *info = find_display (dpy); 606 XExtDisplayInfo *info = find_display (dpy);
625 xXF86VidModeModModeLineReq *req; 607 xXF86VidModeModModeLineReq *req;
626 xXF86OldVidModeModModeLineReq *oldreq; 608 xXF86OldVidModeModModeLineReq *oldreq;
627 int majorVersion, minorVersion; 609 int majorVersion, minorVersion;
628 610
629 XF86VidModeCheckExtension (dpy, info, 0); 611 XF86VidModeCheckExtension (dpy, info, 0);
630 XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion); 612 XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion);
631 613
632 LockDisplay(dpy); 614 LockDisplay(dpy);
633 if (majorVersion < 2) { 615 if (_X_UNLIKELY(majorVersion < 2)) {
634 GetOldReq(XF86VidModeModModeLine, XF86OldVidModeModModeLine, oldreq); 616 GetOldReq(XF86VidModeModModeLine, XF86OldVidModeModModeLine, oldreq);
635 oldreq->reqType = info->codes->major_opcode; 617 oldreq->reqType = info->codes->major_opcode;
636 oldreq->xf86vidmodeReqType = X_XF86VidModeModModeLine; 618 oldreq->xf86vidmodeReqType = X_XF86VidModeModModeLine;
637 oldreq->screen = screen; 619 oldreq->screen = screen;
638 oldreq->hdisplay = modeline->hdisplay; 620 oldreq->hdisplay = modeline->hdisplay;
639 oldreq->hsyncstart = modeline->hsyncstart; 621 oldreq->hsyncstart = modeline->hsyncstart;
640 oldreq->hsyncend = modeline->hsyncend; 622 oldreq->hsyncend = modeline->hsyncend;
641 oldreq->htotal = modeline->htotal; 623 oldreq->htotal = modeline->htotal;
642 oldreq->vdisplay = modeline->vdisplay; 624 oldreq->vdisplay = modeline->vdisplay;
643 oldreq->vsyncstart = modeline->vsyncstart; 625 oldreq->vsyncstart = modeline->vsyncstart;
644 oldreq->vsyncend = modeline->vsyncend; 626 oldreq->vsyncend = modeline->vsyncend;
645 oldreq->vtotal = modeline->vtotal; 627 oldreq->vtotal = modeline->vtotal;
646 oldreq->flags = modeline->flags; 628 oldreq->flags = modeline->flags;
@@ -682,27 +664,27 @@ XF86VidModeValidateModeLine(Display *dpy @@ -682,27 +664,27 @@ XF86VidModeValidateModeLine(Display *dpy
682 XF86VidModeModeInfo* modeline) 664 XF86VidModeModeInfo* modeline)
683{ 665{
684 XExtDisplayInfo *info = find_display (dpy); 666 XExtDisplayInfo *info = find_display (dpy);
685 xXF86VidModeValidateModeLineReq *req; 667 xXF86VidModeValidateModeLineReq *req;
686 xXF86OldVidModeValidateModeLineReq *oldreq; 668 xXF86OldVidModeValidateModeLineReq *oldreq;
687 xXF86VidModeValidateModeLineReply rep; 669 xXF86VidModeValidateModeLineReply rep;
688 int majorVersion, minorVersion; 670 int majorVersion, minorVersion;
689 671
690 XF86VidModeCheckExtension (dpy, info, 0); 672 XF86VidModeCheckExtension (dpy, info, 0);
691 XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion); 673 XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion);
692 674
693 LockDisplay(dpy); 675 LockDisplay(dpy);
694 676
695 if (majorVersion < 2) { 677 if (_X_UNLIKELY(majorVersion < 2)) {
696 GetOldReq(XF86VidModeValidateModeLine, XF86OldVidModeValidateModeLine, oldreq); 678 GetOldReq(XF86VidModeValidateModeLine, XF86OldVidModeValidateModeLine, oldreq);
697 oldreq->reqType = info->codes->major_opcode; 679 oldreq->reqType = info->codes->major_opcode;
698 oldreq->xf86vidmodeReqType = X_XF86VidModeValidateModeLine; 680 oldreq->xf86vidmodeReqType = X_XF86VidModeValidateModeLine;
699 oldreq->screen = screen; 681 oldreq->screen = screen;
700 oldreq->dotclock = modeline->dotclock; 682 oldreq->dotclock = modeline->dotclock;
701 oldreq->hdisplay = modeline->hdisplay; 683 oldreq->hdisplay = modeline->hdisplay;
702 oldreq->hsyncstart = modeline->hsyncstart; 684 oldreq->hsyncstart = modeline->hsyncstart;
703 oldreq->hsyncend = modeline->hsyncend; 685 oldreq->hsyncend = modeline->hsyncend;
704 oldreq->htotal = modeline->htotal; 686 oldreq->htotal = modeline->htotal;
705 oldreq->vdisplay = modeline->vdisplay; 687 oldreq->vdisplay = modeline->vdisplay;
706 oldreq->vsyncstart = modeline->vsyncstart; 688 oldreq->vsyncstart = modeline->vsyncstart;
707 oldreq->vsyncend = modeline->vsyncend; 689 oldreq->vsyncend = modeline->vsyncend;
708 oldreq->vtotal = modeline->vtotal; 690 oldreq->vtotal = modeline->vtotal;
@@ -774,37 +756,37 @@ XF86VidModeSwitchToMode(Display* dpy, in @@ -774,37 +756,37 @@ XF86VidModeSwitchToMode(Display* dpy, in
774 int majorVersion, minorVersion; 756 int majorVersion, minorVersion;
775 Bool protocolBug = False; 757 Bool protocolBug = False;
776 758
777 XF86VidModeCheckExtension (dpy, info, False); 759 XF86VidModeCheckExtension (dpy, info, False);
778 760
779 /* 761 /*
780 * Note: There was a bug in the protocol implementation in versions 762 * Note: There was a bug in the protocol implementation in versions
781 * 0.x with x < 8 (the .private field wasn't expected to be sent over 763 * 0.x with x < 8 (the .private field wasn't expected to be sent over
782 * the wire). Check the server's version, and accept the old format 764 * the wire). Check the server's version, and accept the old format
783 * if appropriate. 765 * if appropriate.
784 */ 766 */
785 767
786 XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion); 768 XF86VidModeQueryVersion(dpy, &majorVersion, &minorVersion);
787 if (majorVersion == 0 && minorVersion < 8) { 769 if (_X_UNLIKELY(majorVersion == 0 && minorVersion < 8)) {
788 protocolBug = True; 770 protocolBug = True;
789#ifdef DEBUG 771#ifdef DEBUG
790 fprintf(stderr, "XF86VidModeSwitchToMode: Warning: Xserver is" 772 fprintf(stderr, "XF86VidModeSwitchToMode: Warning: Xserver is"
791 "running an old version (%d.%d)\n", majorVersion, 773 "running an old version (%d.%d)\n", majorVersion,
792 minorVersion); 774 minorVersion);
793#endif 775#endif
794 } 776 }
795 777
796 LockDisplay(dpy); 778 LockDisplay(dpy);
797 if (majorVersion < 2) { 779 if (_X_UNLIKELY(majorVersion < 2)) {
798 GetOldReq(XF86VidModeSwitchToMode, XF86OldVidModeSwitchToMode, oldreq); 780 GetOldReq(XF86VidModeSwitchToMode, XF86OldVidModeSwitchToMode, oldreq);
799 oldreq->reqType = info->codes->major_opcode; 781 oldreq->reqType = info->codes->major_opcode;
800 oldreq->xf86vidmodeReqType = X_XF86VidModeSwitchToMode; 782 oldreq->xf86vidmodeReqType = X_XF86VidModeSwitchToMode;
801 oldreq->screen = screen; 783 oldreq->screen = screen;
802 oldreq->dotclock = modeline->dotclock; 784 oldreq->dotclock = modeline->dotclock;
803 oldreq->hdisplay = modeline->hdisplay; 785 oldreq->hdisplay = modeline->hdisplay;
804 oldreq->hsyncstart = modeline->hsyncstart; 786 oldreq->hsyncstart = modeline->hsyncstart;
805 oldreq->hsyncend = modeline->hsyncend; 787 oldreq->hsyncend = modeline->hsyncend;
806 oldreq->htotal = modeline->htotal; 788 oldreq->htotal = modeline->htotal;
807 oldreq->vdisplay = modeline->vdisplay; 789 oldreq->vdisplay = modeline->vdisplay;
808 oldreq->vsyncstart = modeline->vsyncstart; 790 oldreq->vsyncstart = modeline->vsyncstart;
809 oldreq->vsyncend = modeline->vsyncend; 791 oldreq->vsyncend = modeline->vsyncend;
810 oldreq->vtotal = modeline->vtotal; 792 oldreq->vtotal = modeline->vtotal;
@@ -1019,27 +1001,27 @@ XF86VidModeSetViewPort(Display* dpy, int @@ -1019,27 +1001,27 @@ XF86VidModeSetViewPort(Display* dpy, int
1019 1001
1020 UnlockDisplay(dpy); 1002 UnlockDisplay(dpy);
1021 SyncHandle(); 1003 SyncHandle();
1022 return True; 1004 return True;
1023} 1005}
1024 1006
1025Bool 1007Bool
1026XF86VidModeGetDotClocks(Display* dpy, int screen, int *flagsPtr, 1008XF86VidModeGetDotClocks(Display* dpy, int screen, int *flagsPtr,
1027 int *numclocksPtr, int *maxclocksPtr, int *clocksPtr[]) 1009 int *numclocksPtr, int *maxclocksPtr, int *clocksPtr[])
1028{ 1010{
1029 XExtDisplayInfo *info = find_display (dpy); 1011 XExtDisplayInfo *info = find_display (dpy);
1030 xXF86VidModeGetDotClocksReply rep; 1012 xXF86VidModeGetDotClocksReply rep;
1031 xXF86VidModeGetDotClocksReq *req; 1013 xXF86VidModeGetDotClocksReq *req;
1032 int i, *dotclocks; 1014 int *dotclocks;
1033 CARD32 dotclk; 1015 CARD32 dotclk;
1034 Bool result = True; 1016 Bool result = True;
1035 1017
1036 XF86VidModeCheckExtension (dpy, info, False); 1018 XF86VidModeCheckExtension (dpy, info, False);
1037 1019
1038 LockDisplay(dpy); 1020 LockDisplay(dpy);
1039 GetReq(XF86VidModeGetDotClocks, req); 1021 GetReq(XF86VidModeGetDotClocks, req);
1040 req->reqType = info->codes->major_opcode; 1022 req->reqType = info->codes->major_opcode;
1041 req->xf86vidmodeReqType = X_XF86VidModeGetDotClocks; 1023 req->xf86vidmodeReqType = X_XF86VidModeGetDotClocks;
1042 req->screen = screen; 1024 req->screen = screen;
1043 if (!_XReply(dpy, (xReply *)&rep, 1025 if (!_XReply(dpy, (xReply *)&rep,
1044 (SIZEOF(xXF86VidModeGetDotClocksReply) - SIZEOF(xReply)) >> 2, xFalse)) 1026 (SIZEOF(xXF86VidModeGetDotClocksReply) - SIZEOF(xReply)) >> 2, xFalse))
1045 { 1027 {
@@ -1048,26 +1030,28 @@ XF86VidModeGetDotClocks(Display* dpy, in @@ -1048,26 +1030,28 @@ XF86VidModeGetDotClocks(Display* dpy, in
1048 return False; 1030 return False;
1049 } 1031 }
1050 *numclocksPtr = rep.clocks; 1032 *numclocksPtr = rep.clocks;
1051 *maxclocksPtr = rep.maxclocks; 1033 *maxclocksPtr = rep.maxclocks;
1052 *flagsPtr = rep.flags; 1034 *flagsPtr = rep.flags;
1053 1035
1054 dotclocks = Xcalloc(rep.clocks, sizeof(int)); 1036 dotclocks = Xcalloc(rep.clocks, sizeof(int));
1055 if (dotclocks == NULL) { 1037 if (dotclocks == NULL) {
1056 _XEatDataWords(dpy, rep.length - 1038 _XEatDataWords(dpy, rep.length -
1057 ((SIZEOF(xXF86VidModeGetDotClocksReply) - SIZEOF(xReply)) >> 2)); 1039 ((SIZEOF(xXF86VidModeGetDotClocksReply) - SIZEOF(xReply)) >> 2));
1058 result = False; 1040 result = False;
1059 } 1041 }
1060 else { 1042 else {
 1043 unsigned int i;
 1044
1061 for (i = 0; i < rep.clocks; i++) { 1045 for (i = 0; i < rep.clocks; i++) {
1062 _XRead(dpy, (char*)&dotclk, 4); 1046 _XRead(dpy, (char*)&dotclk, 4);
1063 dotclocks[i] = dotclk; 1047 dotclocks[i] = dotclk;
1064 } 1048 }
1065 } 1049 }
1066 *clocksPtr = dotclocks; 1050 *clocksPtr = dotclocks;
1067 UnlockDisplay(dpy); 1051 UnlockDisplay(dpy);
1068 SyncHandle(); 1052 SyncHandle();
1069 return result; 1053 return result;
1070} 1054}
1071 1055
1072Bool 1056Bool
1073XF86VidModeSetGammaRamp ( 1057XF86VidModeSetGammaRamp (