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