| @@ -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 | | | |
45 | static 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 | |
63 | static XExtensionInfo _xf86vidmode_info_data; | | 52 | static XExtensionInfo _xf86vidmode_info_data; |
64 | static XExtensionInfo *xf86vidmode_info = &_xf86vidmode_info_data; | | 53 | static XExtensionInfo *xf86vidmode_info = &_xf86vidmode_info_data; |
65 | static const char *xf86vidmode_extension_name = XF86VIDMODENAME; | | 54 | static 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 | |
213 | Bool | | 202 | Bool |
214 | XF86VidModeGetModeLine(Display* dpy, int screen, int* dotclock, | | 203 | XF86VidModeGetModeLine(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 | |
292 | Bool | | 287 | Bool |
293 | XF86VidModeGetAllModeLines(Display* dpy, int screen, int* modecount, | | 288 | XF86VidModeGetAllModeLines(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 | | | | |
448 | Bool | | 430 | Bool |
449 | XF86VidModeAddModeLine(Display *dpy, int screen, | | 431 | XF86VidModeAddModeLine(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 |
559 | Bool | | 541 | Bool |
560 | XF86VidModeDeleteModeLine(Display *dpy, int screen, | | 542 | XF86VidModeDeleteModeLine(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 | |
621 | Bool | | 603 | Bool |
622 | XF86VidModeModModeLine(Display *dpy, int screen, XF86VidModeModeLine* modeline) | | 604 | XF86VidModeModModeLine(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 | |
1025 | Bool | | 1007 | Bool |
1026 | XF86VidModeGetDotClocks(Display* dpy, int screen, int *flagsPtr, | | 1008 | XF86VidModeGetDotClocks(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 | |
1072 | Bool | | 1056 | Bool |
1073 | XF86VidModeSetGammaRamp ( | | 1057 | XF86VidModeSetGammaRamp ( |