os.h (21144B)
1 /*********************************************************** 2 3 Copyright 1987, 1998 The Open Group 4 5 Permission to use, copy, modify, distribute, and sell this software and its 6 documentation for any purpose is hereby granted without fee, provided that 7 the above copyright notice appear in all copies and that both that 8 copyright notice and this permission notice appear in supporting 9 documentation. 10 11 The above copyright notice and this permission notice shall be included in 12 all copies or substantial portions of the Software. 13 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 18 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 19 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 20 21 Except as contained in this notice, the name of The Open Group shall not be 22 used in advertising or otherwise to promote the sale, use or other dealings 23 in this Software without prior written authorization from The Open Group. 24 25 Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. 26 27 All Rights Reserved 28 29 Permission to use, copy, modify, and distribute this software and its 30 documentation for any purpose and without fee is hereby granted, 31 provided that the above copyright notice appear in all copies and that 32 both that copyright notice and this permission notice appear in 33 supporting documentation, and that the name of Digital not be 34 used in advertising or publicity pertaining to distribution of the 35 software without specific, written prior permission. 36 37 DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 38 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL 39 DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR 40 ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 41 WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 42 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 43 SOFTWARE. 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 76 typedef struct _FontPathRec *FontPathPtr; 77 typedef 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 95 #ifdef DDXBEFORERESET 96 extern void ddxBeforeReset(void); 97 #endif 98 99 #ifdef DDXOSVERRORF 100 extern _X_EXPORT void (*OsVendorVErrorFProc) (const char *, 101 va_list args) 102 _X_ATTRIBUTE_PRINTF(1, 0); 103 #endif 104 105 extern _X_EXPORT Bool WaitForSomething(Bool clients_are_ready); 106 107 extern _X_EXPORT int ReadRequestFromClient(ClientPtr /*client */ ); 108 109 extern _X_EXPORT int ReadFdFromClient(ClientPtr client); 110 111 extern _X_EXPORT int WriteFdToClient(ClientPtr client, int fd, Bool do_close); 112 113 extern _X_EXPORT Bool InsertFakeRequest(ClientPtr /*client */ , 114 char * /*data */ , 115 int /*count */ ); 116 117 extern _X_EXPORT void ResetCurrentRequest(ClientPtr /*client */ ); 118 119 extern _X_EXPORT void FlushAllOutput(void); 120 121 extern _X_EXPORT void FlushIfCriticalOutputPending(void); 122 123 extern _X_EXPORT void SetCriticalOutputPending(void); 124 125 extern _X_EXPORT int WriteToClient(ClientPtr /*who */ , int /*count */ , 126 const void * /*buf */ ); 127 128 extern _X_EXPORT void ResetOsBuffers(void); 129 130 extern _X_EXPORT void NotifyParentProcess(void); 131 132 extern _X_EXPORT void CreateWellKnownSockets(void); 133 134 extern _X_EXPORT void ResetWellKnownSockets(void); 135 136 extern _X_EXPORT void CloseWellKnownConnections(void); 137 138 extern _X_EXPORT XID AuthorizationIDOfClient(ClientPtr /*client */ ); 139 140 extern _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 146 extern _X_EXPORT void CloseDownConnection(ClientPtr /*client */ ); 147 148 typedef 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 155 extern _X_EXPORT Bool SetNotifyFd(int fd, NotifyFdProcPtr notify_fd, int mask, void *data); 156 157 static inline void RemoveNotifyFd(int fd) 158 { 159 (void) SetNotifyFd(fd, NULL, X_NOTIFY_NONE, NULL); 160 } 161 162 extern _X_EXPORT int OnlyListenToOneClient(ClientPtr /*client */ ); 163 164 extern _X_EXPORT void ListenToAllClients(void); 165 166 extern _X_EXPORT void IgnoreClient(ClientPtr /*client */ ); 167 168 extern _X_EXPORT void AttendClient(ClientPtr /*client */ ); 169 170 extern _X_EXPORT void MakeClientGrabImpervious(ClientPtr /*client */ ); 171 172 extern _X_EXPORT void MakeClientGrabPervious(ClientPtr /*client */ ); 173 174 extern _X_EXPORT void ListenOnOpenFD(int /* fd */ , int /* noxauth */ ); 175 176 extern _X_EXPORT Bool AddClientOnOpenFD(int /* fd */ ); 177 178 #ifdef MONOTONIC_CLOCK 179 extern void ForceClockId(clockid_t /* forced_clockid */); 180 #endif 181 182 extern _X_EXPORT CARD32 GetTimeInMillis(void); 183 extern _X_EXPORT CARD64 GetTimeInMicros(void); 184 185 extern _X_EXPORT void AdjustWaitForDelay(void *waitTime, int newdelay); 186 187 typedef struct _OsTimerRec *OsTimerPtr; 188 189 typedef CARD32 (*OsTimerCallback) (OsTimerPtr timer, 190 CARD32 time, 191 void *arg); 192 193 extern _X_EXPORT void TimerInit(void); 194 195 extern _X_EXPORT Bool TimerForce(OsTimerPtr /* timer */ ); 196 197 #define TimerAbsolute (1<<0) 198 #define TimerForceOld (1<<1) 199 200 extern _X_EXPORT OsTimerPtr TimerSet(OsTimerPtr timer, 201 int flags, 202 CARD32 millis, 203 OsTimerCallback func, 204 void *arg); 205 206 extern _X_EXPORT void TimerCheck(void); 207 extern _X_EXPORT void TimerCancel(OsTimerPtr /* pTimer */ ); 208 extern _X_EXPORT void TimerFree(OsTimerPtr /* pTimer */ ); 209 210 extern _X_EXPORT void SetScreenSaverTimer(void); 211 extern _X_EXPORT void FreeScreenSaverTimer(void); 212 213 extern _X_EXPORT void AutoResetServer(int /*sig */ ); 214 215 extern _X_EXPORT void GiveUp(int /*sig */ ); 216 217 extern _X_EXPORT void UseMsg(void); 218 219 extern _X_EXPORT void ProcessCommandLine(int /*argc */ , char * /*argv */ []); 220 221 extern _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 */ 229 extern _X_EXPORT void * 230 XNFalloc(unsigned long /*amount */ ); 231 232 /* 233 * This function calloc(3)s buffer, terminating the server if there is not 234 * enough memory. 235 */ 236 extern _X_EXPORT void * 237 XNFcalloc(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 */ 243 extern _X_EXPORT void * 244 XNFcallocarray(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 */ 250 extern _X_EXPORT void * 251 XNFrealloc(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 */ 257 extern _X_EXPORT void * 258 XNFreallocarray(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 */ 264 extern _X_EXPORT char * 265 Xstrdup(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 */ 271 extern _X_EXPORT char * 272 XNFstrdup(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 */ 278 extern _X_EXPORT char * 279 Xprintf(const char *fmt, ...) 280 _X_ATTRIBUTE_PRINTF(1, 2) 281 _X_DEPRECATED; 282 extern _X_EXPORT char * 283 Xvprintf(const char *fmt, va_list va) 284 _X_ATTRIBUTE_PRINTF(1, 0) 285 _X_DEPRECATED; 286 extern _X_EXPORT char * 287 XNFprintf(const char *fmt, ...) 288 _X_ATTRIBUTE_PRINTF(1, 2) 289 _X_DEPRECATED; 290 extern _X_EXPORT char * 291 XNFvprintf(const char *fmt, va_list va) 292 _X_ATTRIBUTE_PRINTF(1, 0) 293 _X_DEPRECATED; 294 295 typedef void (*OsSigHandlerPtr) (int /* sig */ ); 296 typedef int (*OsSigWrapperPtr) (int /* sig */ ); 297 298 extern _X_EXPORT OsSigHandlerPtr 299 OsSignal(int /* sig */ , OsSigHandlerPtr /* handler */ ); 300 extern _X_EXPORT OsSigWrapperPtr 301 OsRegisterSigWrapper(OsSigWrapperPtr newWrap); 302 303 extern _X_EXPORT int auditTrailLevel; 304 305 extern _X_EXPORT void 306 LockServer(void); 307 extern _X_EXPORT void 308 UnlockServer(void); 309 310 extern _X_EXPORT int 311 OsLookupColor(int /*screen */ , 312 char * /*name */ , 313 unsigned /*len */ , 314 unsigned short * /*pred */ , 315 unsigned short * /*pgreen */ , 316 unsigned short * /*pblue */ ); 317 318 extern _X_EXPORT void 319 OsInit(void); 320 321 extern _X_EXPORT void 322 OsCleanup(Bool); 323 324 extern _X_EXPORT void 325 OsVendorFatalError(const char *f, va_list args) 326 _X_ATTRIBUTE_PRINTF(1, 0); 327 328 extern _X_EXPORT void 329 OsVendorInit(void); 330 331 extern _X_EXPORT void 332 OsBlockSignals(void); 333 334 extern _X_EXPORT void 335 OsReleaseSignals(void); 336 337 extern void 338 OsResetSignals(void); 339 340 extern _X_EXPORT void 341 OsAbort(void) 342 _X_NORETURN; 343 344 #if !defined(WIN32) 345 extern _X_EXPORT int 346 System(const char *); 347 extern _X_EXPORT void * 348 Popen(const char *, const char *); 349 extern _X_EXPORT int 350 Pclose(void *); 351 extern _X_EXPORT void * 352 Fopen(const char *, const char *); 353 extern _X_EXPORT int 354 Fclose(void *); 355 #else 356 357 extern const char * 358 Win32TempDir(void); 359 360 extern int 361 System(const char *cmdline); 362 363 #define Fopen(a,b) fopen(a,b) 364 #define Fclose(a) fclose(a) 365 #endif 366 367 extern _X_EXPORT Bool 368 PrivsElevated(void); 369 370 extern _X_EXPORT void 371 CheckUserParameters(int argc, char **argv, char **envp); 372 extern _X_EXPORT void 373 CheckUserAuthorization(void); 374 375 extern _X_EXPORT int 376 AddHost(ClientPtr /*client */ , 377 int /*family */ , 378 unsigned /*length */ , 379 const void * /*pAddr */ ); 380 381 extern _X_EXPORT Bool 382 ForEachHostInFamily(int family, 383 Bool (*func)( 384 unsigned char *addr, 385 short len, 386 void *closure), 387 void *closure); 388 389 extern _X_EXPORT int 390 RemoveHost(ClientPtr client, 391 int family, 392 unsigned length, 393 void *pAddr); 394 395 extern _X_EXPORT int 396 GetHosts(void ** /*data */ , 397 int * /*pnHosts */ , 398 int * /*pLen */ , 399 BOOL * /*pEnabled */ ); 400 401 typedef struct sockaddr *sockaddrPtr; 402 403 extern _X_EXPORT int 404 InvalidHost(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 411 typedef 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 421 extern _X_EXPORT int 422 GetLocalClientCreds(ClientPtr, LocalClientCredRec **); 423 424 extern _X_EXPORT void 425 FreeLocalClientCreds(LocalClientCredRec *); 426 427 extern _X_EXPORT int 428 ChangeAccessControl(ClientPtr /*client */ , int /*fEnabled */ ); 429 430 extern _X_EXPORT int 431 GetClientFd(ClientPtr); 432 433 extern _X_EXPORT Bool 434 ClientIsLocal(ClientPtr client); 435 436 extern _X_EXPORT int 437 GetAccessControl(void); 438 439 extern _X_EXPORT void 440 AddLocalHosts(void); 441 442 extern _X_EXPORT void 443 ResetHosts(const char *display); 444 445 extern _X_EXPORT void 446 EnableLocalAccess(void); 447 448 extern _X_EXPORT void 449 DisableLocalAccess(void); 450 451 extern _X_EXPORT void 452 EnableLocalHost(void); 453 454 extern _X_EXPORT void 455 DisableLocalHost(void); 456 457 #ifndef NO_LOCAL_CLIENT_CRED 458 extern _X_EXPORT void 459 EnableLocalUser(void); 460 461 extern _X_EXPORT void 462 DisableLocalUser(void); 463 464 extern _X_EXPORT void 465 LocalAccessScopeUser(void); 466 #endif 467 468 extern _X_EXPORT void 469 AccessUsingXdmcp(void); 470 471 extern _X_EXPORT void 472 DefineSelf(int /*fd */ ); 473 474 #ifdef XDMCP 475 extern _X_EXPORT void 476 AugmentSelf(void *from, int len); 477 478 extern _X_EXPORT void 479 RegisterAuthorizations(void); 480 #endif 481 482 extern _X_EXPORT void 483 InitAuthorization(const char * /*filename */ ); 484 485 /* extern int LoadAuthorization(void); */ 486 487 extern _X_EXPORT int 488 AuthorizationFromID(XID id, 489 unsigned short *name_lenp, 490 const char **namep, 491 unsigned short *data_lenp, char **datap); 492 493 extern _X_EXPORT XID 494 CheckAuthorization(unsigned int /*namelength */ , 495 const char * /*name */ , 496 unsigned int /*datalength */ , 497 const char * /*data */ , 498 ClientPtr /*client */ , 499 const char ** /*reason */ 500 ); 501 502 extern _X_EXPORT void 503 ResetAuthorization(void); 504 505 extern _X_EXPORT int 506 RemoveAuthorization(unsigned short name_length, 507 const char *name, 508 unsigned short data_length, const char *data); 509 510 extern _X_EXPORT int 511 AddAuthorization(unsigned int /*name_length */ , 512 const char * /*name */ , 513 unsigned int /*data_length */ , 514 char * /*data */ ); 515 516 #ifdef XCSECURITY 517 extern _X_EXPORT XID 518 GenerateAuthorization(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 526 extern _X_EXPORT int 527 ddxProcessArgument(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 536 extern _X_EXPORT void 537 ddxUseMsg(void); 538 539 /* stuff for ReplyCallback */ 540 extern _X_EXPORT CallbackListPtr ReplyCallback; 541 typedef 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 */ 551 extern _X_EXPORT CallbackListPtr FlushCallback; 552 553 enum ExitCode { 554 EXIT_NO_ERROR = 0, 555 EXIT_ERR_ABORT = 1, 556 EXIT_ERR_CONFIGURE = 2, 557 EXIT_ERR_DRIVERS = 3, 558 }; 559 560 extern _X_EXPORT void 561 ddxGiveUp(enum ExitCode error); 562 extern _X_EXPORT void 563 ddxInputThreadInit(void); 564 extern _X_EXPORT int 565 TimeSinceLastInputEvent(void); 566 567 /* Function fallbacks provided by AC_REPLACE_FUNCS in configure.ac */ 568 569 #ifndef HAVE_REALLOCARRAY 570 #define reallocarray xreallocarray 571 extern _X_EXPORT void * 572 reallocarray(void *optr, size_t nmemb, size_t size); 573 #endif 574 575 #ifndef HAVE_STRCASECMP 576 #define strcasecmp xstrcasecmp 577 extern _X_EXPORT int 578 xstrcasecmp(const char *s1, const char *s2); 579 #endif 580 581 #ifndef HAVE_STRNCASECMP 582 #define strncasecmp xstrncasecmp 583 extern _X_EXPORT int 584 xstrncasecmp(const char *s1, const char *s2, size_t n); 585 #endif 586 587 #ifndef HAVE_STRCASESTR 588 #define strcasestr xstrcasestr 589 extern _X_EXPORT char * 590 xstrcasestr(const char *s, const char *find); 591 #endif 592 593 #ifndef HAVE_STRLCPY 594 extern _X_EXPORT size_t 595 strlcpy(char *dst, const char *src, size_t siz); 596 extern _X_EXPORT size_t 597 strlcat(char *dst, const char *src, size_t siz); 598 #endif 599 600 #ifndef HAVE_STRNDUP 601 extern _X_EXPORT char * 602 strndup(const char *str, size_t n); 603 #endif 604 605 #ifndef HAVE_TIMINGSAFE_MEMCMP 606 extern _X_EXPORT int 607 timingsafe_memcmp(const void *b1, const void *b2, size_t len); 608 #endif 609 610 /* Logging. */ 611 typedef enum _LogParameter { 612 XLOG_FLUSH, 613 XLOG_SYNC, 614 XLOG_VERBOSITY, 615 XLOG_FILE_VERBOSITY 616 } LogParameter; 617 618 /* Flags for log messages. */ 619 typedef 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 634 extern _X_EXPORT const char * 635 LogInit(const char *fname, const char *backup); 636 extern void 637 LogSetDisplay(void); 638 extern _X_EXPORT void 639 LogClose(enum ExitCode error); 640 extern _X_EXPORT Bool 641 LogSetParameter(LogParameter param, int value); 642 extern _X_EXPORT void 643 LogVWrite(int verb, const char *f, va_list args) 644 _X_ATTRIBUTE_PRINTF(2, 0); 645 extern _X_EXPORT void 646 LogWrite(int verb, const char *f, ...) 647 _X_ATTRIBUTE_PRINTF(2, 3); 648 extern _X_EXPORT void 649 LogVMessageVerb(MessageType type, int verb, const char *format, va_list args) 650 _X_ATTRIBUTE_PRINTF(3, 0); 651 extern _X_EXPORT void 652 LogMessageVerb(MessageType type, int verb, const char *format, ...) 653 _X_ATTRIBUTE_PRINTF(3, 4); 654 extern _X_EXPORT void 655 LogMessage(MessageType type, const char *format, ...) 656 _X_ATTRIBUTE_PRINTF(2, 3); 657 extern _X_EXPORT void 658 LogMessageVerbSigSafe(MessageType type, int verb, const char *format, ...) 659 _X_ATTRIBUTE_PRINTF(3, 4); 660 extern _X_EXPORT void 661 LogVMessageVerbSigSafe(MessageType type, int verb, const char *format, va_list args) 662 _X_ATTRIBUTE_PRINTF(3, 0); 663 664 extern _X_EXPORT void 665 LogVHdrMessageVerb(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); 670 extern _X_EXPORT void 671 LogHdrMessageVerb(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); 676 extern _X_EXPORT void 677 LogHdrMessage(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 682 extern _X_EXPORT void 683 FreeAuditTimer(void); 684 extern _X_EXPORT void 685 AuditF(const char *f, ...) 686 _X_ATTRIBUTE_PRINTF(1, 2); 687 extern _X_EXPORT void 688 VAuditF(const char *f, va_list args) 689 _X_ATTRIBUTE_PRINTF(1, 0); 690 extern _X_EXPORT void 691 FatalError(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 701 extern _X_EXPORT void 702 VErrorF(const char *f, va_list args) 703 _X_ATTRIBUTE_PRINTF(1, 0); 704 extern _X_EXPORT void 705 ErrorF(const char *f, ...) 706 _X_ATTRIBUTE_PRINTF(1, 2); 707 extern _X_EXPORT void 708 VErrorFSigSafe(const char *f, va_list args) 709 _X_ATTRIBUTE_PRINTF(1, 0); 710 extern _X_EXPORT void 711 ErrorFSigSafe(const char *f, ...) 712 _X_ATTRIBUTE_PRINTF(1, 2); 713 extern _X_EXPORT void 714 LogPrintMarkers(void); 715 716 extern _X_EXPORT void 717 xorg_backtrace(void); 718 719 extern _X_EXPORT int 720 os_move_fd(int fd); 721 722 #include <signal.h> 723 724 #if defined(WIN32) && !defined(__CYGWIN__) 725 typedef _sigset_t sigset_t; 726 #endif 727 728 extern _X_EXPORT int 729 xthread_sigmask(int how, const sigset_t *set, sigset_t *oldest); 730 731 #endif /* OS_H */