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