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