os.h revision f7df2e56
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#ifndef OS_H 48#define OS_H 49 50#include "misc.h" 51#include <stdarg.h> 52#include <stdint.h> 53#include <string.h> 54 55#define SCREEN_SAVER_ON 0 56#define SCREEN_SAVER_OFF 1 57#define SCREEN_SAVER_FORCER 2 58#define SCREEN_SAVER_CYCLE 3 59 60#ifndef MAX_REQUEST_SIZE 61#define MAX_REQUEST_SIZE 65535 62#endif 63#ifndef MAX_BIG_REQUEST_SIZE 64#define MAX_BIG_REQUEST_SIZE 4194303 65#endif 66 67typedef struct _FontPathRec *FontPathPtr; 68typedef struct _NewClientRec *NewClientPtr; 69 70#ifndef xnfalloc 71#define xnfalloc(size) XNFalloc((unsigned long)(size)) 72#define xnfcalloc(_num, _size) XNFcallocarray((_num), (_size)) 73#define xnfrealloc(ptr, size) XNFrealloc((void *)(ptr), (unsigned long)(size)) 74 75#define xstrdup(s) Xstrdup(s) 76#define xnfstrdup(s) XNFstrdup(s) 77 78#define xallocarray(num, size) reallocarray(NULL, (num), (size)) 79#define xnfallocarray(num, size) XNFreallocarray(NULL, (num), (size)) 80#define xnfreallocarray(ptr, num, size) XNFreallocarray((ptr), (num), (size)) 81#endif 82 83#include <stdio.h> 84#include <stdarg.h> 85#include <string.h> 86#include <strings.h> 87 88 89#ifdef DDXBEFORERESET 90extern void ddxBeforeReset(void); 91#endif 92 93#ifdef DDXOSVERRORF 94extern _X_EXPORT void (*OsVendorVErrorFProc) (const char *, 95 va_list args) 96_X_ATTRIBUTE_PRINTF(1, 0); 97#endif 98 99extern _X_EXPORT int WaitForSomething(int * /*pClientsReady */ 100 ); 101 102extern _X_EXPORT int ReadRequestFromClient(ClientPtr /*client */ ); 103 104#if XTRANS_SEND_FDS 105extern _X_EXPORT int ReadFdFromClient(ClientPtr client); 106 107extern _X_EXPORT int WriteFdToClient(ClientPtr client, int fd, Bool do_close); 108#endif 109 110extern _X_EXPORT Bool InsertFakeRequest(ClientPtr /*client */ , 111 char * /*data */ , 112 int /*count */ ); 113 114extern _X_EXPORT void ResetCurrentRequest(ClientPtr /*client */ ); 115 116extern _X_EXPORT void FlushAllOutput(void); 117 118extern _X_EXPORT void FlushIfCriticalOutputPending(void); 119 120extern _X_EXPORT void SetCriticalOutputPending(void); 121 122extern _X_EXPORT int WriteToClient(ClientPtr /*who */ , int /*count */ , 123 const void * /*buf */ ); 124 125extern _X_EXPORT void ResetOsBuffers(void); 126 127extern _X_EXPORT void InitConnectionLimits(void); 128 129extern _X_EXPORT void NotifyParentProcess(void); 130 131extern _X_EXPORT void CreateWellKnownSockets(void); 132 133extern _X_EXPORT void ResetWellKnownSockets(void); 134 135extern _X_EXPORT void CloseWellKnownConnections(void); 136 137extern _X_EXPORT XID AuthorizationIDOfClient(ClientPtr /*client */ ); 138 139extern _X_EXPORT const char *ClientAuthorized(ClientPtr /*client */ , 140 unsigned int /*proto_n */ , 141 char * /*auth_proto */ , 142 unsigned int /*string_n */ , 143 char * /*auth_string */ ); 144 145extern _X_EXPORT Bool EstablishNewConnections(ClientPtr clientUnused, 146 void *closure); 147 148extern _X_EXPORT void CheckConnections(void); 149 150extern _X_EXPORT void CloseDownConnection(ClientPtr /*client */ ); 151 152extern _X_EXPORT void AddGeneralSocket(int /*fd */ ); 153 154extern _X_EXPORT void RemoveGeneralSocket(int /*fd */ ); 155 156extern _X_EXPORT void AddEnabledDevice(int /*fd */ ); 157 158extern _X_EXPORT void RemoveEnabledDevice(int /*fd */ ); 159 160extern _X_EXPORT int OnlyListenToOneClient(ClientPtr /*client */ ); 161 162extern _X_EXPORT void ListenToAllClients(void); 163 164extern _X_EXPORT void IgnoreClient(ClientPtr /*client */ ); 165 166extern _X_EXPORT void AttendClient(ClientPtr /*client */ ); 167 168extern _X_EXPORT void MakeClientGrabImpervious(ClientPtr /*client */ ); 169 170extern _X_EXPORT void MakeClientGrabPervious(ClientPtr /*client */ ); 171 172extern _X_EXPORT void ListenOnOpenFD(int /* fd */ , int /* noxauth */ ); 173 174extern _X_EXPORT Bool AddClientOnOpenFD(int /* fd */ ); 175 176extern _X_EXPORT CARD32 GetTimeInMillis(void); 177extern _X_EXPORT CARD64 GetTimeInMicros(void); 178 179extern _X_EXPORT void AdjustWaitForDelay(void *waitTime, 180 unsigned long newdelay); 181 182typedef struct _OsTimerRec *OsTimerPtr; 183 184typedef CARD32 (*OsTimerCallback) (OsTimerPtr timer, 185 CARD32 time, 186 void *arg); 187 188extern _X_EXPORT void TimerInit(void); 189 190extern _X_EXPORT Bool TimerForce(OsTimerPtr /* timer */ ); 191 192#define TimerAbsolute (1<<0) 193#define TimerForceOld (1<<1) 194 195extern _X_EXPORT OsTimerPtr TimerSet(OsTimerPtr timer, 196 int flags, 197 CARD32 millis, 198 OsTimerCallback func, 199 void *arg); 200 201extern _X_EXPORT void TimerCheck(void); 202extern _X_EXPORT void TimerCancel(OsTimerPtr /* pTimer */ ); 203extern _X_EXPORT void TimerFree(OsTimerPtr /* pTimer */ ); 204 205extern _X_EXPORT void SetScreenSaverTimer(void); 206extern _X_EXPORT void FreeScreenSaverTimer(void); 207 208extern _X_EXPORT void AutoResetServer(int /*sig */ ); 209 210extern _X_EXPORT void GiveUp(int /*sig */ ); 211 212extern _X_EXPORT void UseMsg(void); 213 214extern _X_EXPORT void ProcessCommandLine(int /*argc */ , char * /*argv */ []); 215 216extern _X_EXPORT int set_font_authorizations(char **authorizations, 217 int *authlen, 218 void *client); 219 220#if 0 221/* 222 * These causes all sorts of warnings->errors in the xsrc build. 223 */ 224#ifdef __NetBSD__ 225#undef _X_DEPRECATED 226#define _X_DEPRECATED 227#endif 228#endif 229 230/* 231 * This function malloc(3)s buffer, terminating the server if there is not 232 * enough memory. 233 */ 234extern _X_EXPORT void * 235XNFalloc(unsigned long /*amount */ ); 236 237/* 238 * This function calloc(3)s buffer, terminating the server if there is not 239 * enough memory. 240 */ 241extern _X_EXPORT void * 242XNFcalloc(unsigned long /*amount */ ) _X_DEPRECATED; 243 244/* 245 * This function calloc(3)s buffer, terminating the server if there is not 246 * enough memory or the arguments overflow when multiplied 247 */ 248extern _X_EXPORT void * 249XNFcallocarray(size_t nmemb, size_t size); 250 251/* 252 * This function realloc(3)s passed buffer, terminating the server if there is 253 * not enough memory. 254 */ 255extern _X_EXPORT void * 256XNFrealloc(void * /*ptr */ , unsigned long /*amount */ ); 257 258/* 259 * This function reallocarray(3)s passed buffer, terminating the server if 260 * there is not enough memory or the arguments overflow when multiplied. 261 */ 262extern _X_EXPORT void * 263XNFreallocarray(void *ptr, size_t nmemb, size_t size); 264 265/* 266 * This function strdup(3)s passed string. The only difference from the library 267 * function that it is safe to pass NULL, as NULL will be returned. 268 */ 269extern _X_EXPORT char * 270Xstrdup(const char *s); 271 272/* 273 * This function strdup(3)s passed string, terminating the server if there is 274 * not enough memory. If NULL is passed to this function, NULL is returned. 275 */ 276extern _X_EXPORT char * 277XNFstrdup(const char *s); 278 279/* Include new X*asprintf API */ 280#include "Xprintf.h" 281 282/* Older api deprecated in favor of the asprintf versions */ 283extern _X_EXPORT char * 284Xprintf(const char *fmt, ...) 285_X_ATTRIBUTE_PRINTF(1, 2) 286 _X_DEPRECATED; 287extern _X_EXPORT char * 288Xvprintf(const char *fmt, va_list va) 289_X_ATTRIBUTE_PRINTF(1, 0) 290 _X_DEPRECATED; 291extern _X_EXPORT char * 292XNFprintf(const char *fmt, ...) 293_X_ATTRIBUTE_PRINTF(1, 2) 294 _X_DEPRECATED; 295extern _X_EXPORT char * 296XNFvprintf(const char *fmt, va_list va) 297_X_ATTRIBUTE_PRINTF(1, 0) 298 _X_DEPRECATED; 299 300typedef void (*OsSigHandlerPtr) (int /* sig */ ); 301typedef int (*OsSigWrapperPtr) (int /* sig */ ); 302 303extern _X_EXPORT OsSigHandlerPtr 304OsSignal(int /* sig */ , OsSigHandlerPtr /* handler */ ); 305extern _X_EXPORT OsSigWrapperPtr 306OsRegisterSigWrapper(OsSigWrapperPtr newWrap); 307 308extern _X_EXPORT int auditTrailLevel; 309 310extern _X_EXPORT void 311LockServer(void); 312extern _X_EXPORT void 313UnlockServer(void); 314 315extern _X_EXPORT int 316OsLookupColor(int /*screen */ , 317 char * /*name */ , 318 unsigned /*len */ , 319 unsigned short * /*pred */ , 320 unsigned short * /*pgreen */ , 321 unsigned short * /*pblue */ ); 322 323extern _X_EXPORT void 324OsInit(void); 325 326extern _X_EXPORT void 327OsCleanup(Bool); 328 329extern _X_EXPORT void 330OsVendorFatalError(const char *f, va_list args) 331_X_ATTRIBUTE_PRINTF(1, 0); 332 333extern _X_EXPORT void 334OsVendorInit(void); 335 336extern _X_EXPORT void 337OsBlockSignals(void); 338 339extern _X_EXPORT void 340OsReleaseSignals(void); 341 342extern _X_EXPORT int 343OsBlockSIGIO(void); 344 345extern _X_EXPORT void 346OsReleaseSIGIO(void); 347 348extern void 349OsResetSignals(void); 350 351extern _X_EXPORT void 352OsAbort(void) 353 _X_NORETURN; 354 355#if !defined(WIN32) 356extern _X_EXPORT int 357System(const char *); 358extern _X_EXPORT void * 359Popen(const char *, const char *); 360extern _X_EXPORT int 361Pclose(void *); 362extern _X_EXPORT void * 363Fopen(const char *, const char *); 364extern _X_EXPORT int 365Fclose(void *); 366#else 367 368extern const char * 369Win32TempDir(void); 370 371extern int 372System(const char *cmdline); 373 374#define Fopen(a,b) fopen(a,b) 375#define Fclose(a) fclose(a) 376#endif 377 378extern _X_EXPORT void 379CheckUserParameters(int argc, char **argv, char **envp); 380extern _X_EXPORT void 381CheckUserAuthorization(void); 382 383extern _X_EXPORT int 384AddHost(ClientPtr /*client */ , 385 int /*family */ , 386 unsigned /*length */ , 387 const void * /*pAddr */ ); 388 389extern _X_EXPORT Bool 390ForEachHostInFamily(int family, 391 Bool (*func)( 392 unsigned char *addr, 393 short len, 394 void *closure), 395 void *closure); 396 397extern _X_EXPORT int 398RemoveHost(ClientPtr client, 399 int family, 400 unsigned length, 401 void *pAddr); 402 403extern _X_EXPORT int 404GetHosts(void ** /*data */ , 405 int * /*pnHosts */ , 406 int * /*pLen */ , 407 BOOL * /*pEnabled */ ); 408 409typedef struct sockaddr *sockaddrPtr; 410 411extern _X_EXPORT int 412InvalidHost(sockaddrPtr /*saddr */ , int /*len */ , ClientPtr client); 413 414#define LCC_UID_SET (1 << 0) 415#define LCC_GID_SET (1 << 1) 416#define LCC_PID_SET (1 << 2) 417#define LCC_ZID_SET (1 << 3) 418 419typedef struct { 420 int fieldsSet; /* Bit mask of fields set */ 421 int euid; /* Effective uid */ 422 int egid; /* Primary effective group id */ 423 int nSuppGids; /* Number of supplementary group ids */ 424 int *pSuppGids; /* Array of supplementary group ids */ 425 int pid; /* Process id */ 426 int zoneid; /* Only set on Solaris 10 & later */ 427} LocalClientCredRec; 428 429extern _X_EXPORT int 430GetLocalClientCreds(ClientPtr, LocalClientCredRec **); 431 432extern _X_EXPORT void 433FreeLocalClientCreds(LocalClientCredRec *); 434 435extern _X_EXPORT int 436ChangeAccessControl(ClientPtr /*client */ , int /*fEnabled */ ); 437 438extern _X_EXPORT int 439GetClientFd(ClientPtr); 440 441extern _X_EXPORT Bool 442ClientIsLocal(ClientPtr client); 443 444extern _X_EXPORT int 445GetAccessControl(void); 446 447extern _X_EXPORT void 448AddLocalHosts(void); 449 450extern _X_EXPORT void 451ResetHosts(const char *display); 452 453extern _X_EXPORT void 454EnableLocalAccess(void); 455 456extern _X_EXPORT void 457DisableLocalAccess(void); 458 459extern _X_EXPORT void 460EnableLocalHost(void); 461 462extern _X_EXPORT void 463DisableLocalHost(void); 464 465#ifndef NO_LOCAL_CLIENT_CRED 466extern _X_EXPORT void 467EnableLocalUser(void); 468 469extern _X_EXPORT void 470DisableLocalUser(void); 471 472extern _X_EXPORT void 473LocalAccessScopeUser(void); 474#endif 475 476extern _X_EXPORT void 477AccessUsingXdmcp(void); 478 479extern _X_EXPORT void 480DefineSelf(int /*fd */ ); 481 482#if XDMCP 483extern _X_EXPORT void 484AugmentSelf(void *from, int len); 485 486extern _X_EXPORT void 487RegisterAuthorizations(void); 488#endif 489 490extern _X_EXPORT void 491InitAuthorization(const char * /*filename */ ); 492 493/* extern int LoadAuthorization(void); */ 494 495extern _X_EXPORT int 496AuthorizationFromID(XID id, 497 unsigned short *name_lenp, 498 const char **namep, 499 unsigned short *data_lenp, char **datap); 500 501extern _X_EXPORT XID 502CheckAuthorization(unsigned int /*namelength */ , 503 const char * /*name */ , 504 unsigned int /*datalength */ , 505 const char * /*data */ , 506 ClientPtr /*client */ , 507 const char ** /*reason */ 508 ); 509 510extern _X_EXPORT void 511ResetAuthorization(void); 512 513extern _X_EXPORT int 514RemoveAuthorization(unsigned short name_length, 515 const char *name, 516 unsigned short data_length, const char *data); 517 518extern _X_EXPORT int 519AddAuthorization(unsigned int /*name_length */ , 520 const char * /*name */ , 521 unsigned int /*data_length */ , 522 char * /*data */ ); 523 524#ifdef XCSECURITY 525extern _X_EXPORT XID 526GenerateAuthorization(unsigned int /* name_length */ , 527 const char * /* name */ , 528 unsigned int /* data_length */ , 529 const char * /* data */ , 530 unsigned int * /* data_length_return */ , 531 char ** /* data_return */ ); 532#endif 533 534extern _X_EXPORT int 535ddxProcessArgument(int /*argc */ , char * /*argv */ [], int /*i */ ); 536 537extern _X_EXPORT void 538ddxUseMsg(void); 539 540/* stuff for ReplyCallback */ 541extern _X_EXPORT CallbackListPtr ReplyCallback; 542typedef struct { 543 ClientPtr client; 544 const void *replyData; 545 unsigned long dataLenBytes; /* actual bytes from replyData + pad bytes */ 546 unsigned long bytesRemaining; 547 Bool startOfReply; 548 unsigned long padBytes; /* pad bytes from zeroed array */ 549} ReplyInfoRec; 550 551/* stuff for FlushCallback */ 552extern _X_EXPORT CallbackListPtr FlushCallback; 553 554enum ExitCode { 555 EXIT_NO_ERROR = 0, 556 EXIT_ERR_ABORT = 1, 557 EXIT_ERR_CONFIGURE = 2, 558 EXIT_ERR_DRIVERS = 3, 559}; 560 561extern _X_EXPORT void 562AbortDDX(enum ExitCode error); 563extern _X_EXPORT void 564ddxGiveUp(enum ExitCode error); 565extern _X_EXPORT int 566TimeSinceLastInputEvent(void); 567 568/* Function fallbacks provided by AC_REPLACE_FUNCS in configure.ac */ 569 570#ifndef HAVE_REALLOCARRAY 571#define reallocarray xreallocarray 572extern _X_EXPORT void * 573reallocarray(void *optr, size_t nmemb, size_t size); 574#endif 575 576#ifndef HAVE_STRCASECMP 577#define strcasecmp xstrcasecmp 578extern _X_EXPORT int 579xstrcasecmp(const char *s1, const char *s2); 580#endif 581 582#ifndef HAVE_STRNCASECMP 583#define strncasecmp xstrncasecmp 584extern _X_EXPORT int 585xstrncasecmp(const char *s1, const char *s2, size_t n); 586#endif 587 588#ifndef HAVE_STRCASESTR 589#define strcasestr xstrcasestr 590extern _X_EXPORT char * 591xstrcasestr(const char *s, const char *find); 592#endif 593 594#ifndef HAVE_STRLCPY 595extern _X_EXPORT size_t 596strlcpy(char *dst, const char *src, size_t siz); 597extern _X_EXPORT size_t 598strlcat(char *dst, const char *src, size_t siz); 599#endif 600 601#ifndef HAVE_STRNDUP 602extern _X_EXPORT char * 603strndup(const char *str, size_t n); 604#endif 605 606/* Logging. */ 607typedef enum _LogParameter { 608 XLOG_FLUSH, 609 XLOG_SYNC, 610 XLOG_VERBOSITY, 611 XLOG_FILE_VERBOSITY 612} LogParameter; 613 614/* Flags for log messages. */ 615typedef enum { 616 X_PROBED, /* Value was probed */ 617 X_CONFIG, /* Value was given in the config file */ 618 X_DEFAULT, /* Value is a default */ 619 X_CMDLINE, /* Value was given on the command line */ 620 X_NOTICE, /* Notice */ 621 X_ERROR, /* Error message */ 622 X_WARNING, /* Warning message */ 623 X_INFO, /* Informational message */ 624 X_NONE, /* No prefix */ 625 X_NOT_IMPLEMENTED, /* Not implemented */ 626 X_DEBUG, /* Debug message */ 627 X_UNKNOWN = -1 /* unknown -- this must always be last */ 628} MessageType; 629 630extern _X_EXPORT const char * 631LogInit(const char *fname, const char *backup); 632extern void 633LogSetDisplay(void); 634extern _X_EXPORT void 635LogClose(enum ExitCode error); 636extern _X_EXPORT Bool 637LogSetParameter(LogParameter param, int value); 638extern _X_EXPORT void 639LogVWrite(int verb, const char *f, va_list args) 640_X_ATTRIBUTE_PRINTF(2, 0); 641extern _X_EXPORT void 642LogWrite(int verb, const char *f, ...) 643_X_ATTRIBUTE_PRINTF(2, 3); 644extern _X_EXPORT void 645LogVMessageVerb(MessageType type, int verb, const char *format, va_list args) 646_X_ATTRIBUTE_PRINTF(3, 0); 647extern _X_EXPORT void 648LogMessageVerb(MessageType type, int verb, const char *format, ...) 649_X_ATTRIBUTE_PRINTF(3, 4); 650extern _X_EXPORT void 651LogMessage(MessageType type, const char *format, ...) 652_X_ATTRIBUTE_PRINTF(2, 3); 653extern _X_EXPORT void 654LogMessageVerbSigSafe(MessageType type, int verb, const char *format, ...) 655_X_ATTRIBUTE_PRINTF(3, 4); 656extern _X_EXPORT void 657LogVMessageVerbSigSafe(MessageType type, int verb, const char *format, va_list args) 658_X_ATTRIBUTE_PRINTF(3, 0); 659 660extern _X_EXPORT void 661LogVHdrMessageVerb(MessageType type, int verb, 662 const char *msg_format, va_list msg_args, 663 const char *hdr_format, va_list hdr_args) 664_X_ATTRIBUTE_PRINTF(3, 0) 665_X_ATTRIBUTE_PRINTF(5, 0); 666extern _X_EXPORT void 667LogHdrMessageVerb(MessageType type, int verb, 668 const char *msg_format, va_list msg_args, 669 const char *hdr_format, ...) 670_X_ATTRIBUTE_PRINTF(3, 0) 671_X_ATTRIBUTE_PRINTF(5, 6); 672extern _X_EXPORT void 673LogHdrMessage(MessageType type, const char *msg_format, 674 va_list msg_args, const char *hdr_format, ...) 675_X_ATTRIBUTE_PRINTF(2, 0) 676_X_ATTRIBUTE_PRINTF(4, 5); 677 678extern _X_EXPORT void 679FreeAuditTimer(void); 680extern _X_EXPORT void 681AuditF(const char *f, ...) 682_X_ATTRIBUTE_PRINTF(1, 2); 683extern _X_EXPORT void 684VAuditF(const char *f, va_list args) 685_X_ATTRIBUTE_PRINTF(1, 0); 686extern _X_EXPORT void 687FatalError(const char *f, ...) 688_X_ATTRIBUTE_PRINTF(1, 2) 689 _X_NORETURN; 690 691#ifdef DEBUG 692#define DebugF ErrorF 693#else 694#define DebugF(...) /* */ 695#endif 696 697extern _X_EXPORT void 698VErrorF(const char *f, va_list args) 699_X_ATTRIBUTE_PRINTF(1, 0); 700extern _X_EXPORT void 701ErrorF(const char *f, ...) 702_X_ATTRIBUTE_PRINTF(1, 2); 703extern _X_EXPORT void 704VErrorFSigSafe(const char *f, va_list args) 705_X_ATTRIBUTE_PRINTF(1, 0); 706extern _X_EXPORT void 707ErrorFSigSafe(const char *f, ...) 708_X_ATTRIBUTE_PRINTF(1, 2); 709extern _X_EXPORT void 710LogPrintMarkers(void); 711 712extern _X_EXPORT void 713xorg_backtrace(void); 714 715extern _X_EXPORT int 716os_move_fd(int fd); 717 718#endif /* OS_H */ 719