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