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