os.h revision 7e31ba66
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 int
573TimeSinceLastInputEvent(void);
574
575/* Function fallbacks provided by AC_REPLACE_FUNCS in configure.ac */
576
577#ifndef HAVE_REALLOCARRAY
578#define reallocarray xreallocarray
579extern _X_EXPORT void *
580reallocarray(void *optr, size_t nmemb, size_t size);
581#endif
582
583#ifndef HAVE_STRCASECMP
584#define strcasecmp xstrcasecmp
585extern _X_EXPORT int
586xstrcasecmp(const char *s1, const char *s2);
587#endif
588
589#ifndef HAVE_STRNCASECMP
590#define strncasecmp xstrncasecmp
591extern _X_EXPORT int
592xstrncasecmp(const char *s1, const char *s2, size_t n);
593#endif
594
595#ifndef HAVE_STRCASESTR
596#define strcasestr xstrcasestr
597extern _X_EXPORT char *
598xstrcasestr(const char *s, const char *find);
599#endif
600
601#ifndef HAVE_STRLCPY
602extern _X_EXPORT size_t
603strlcpy(char *dst, const char *src, size_t siz);
604extern _X_EXPORT size_t
605strlcat(char *dst, const char *src, size_t siz);
606#endif
607
608#ifndef HAVE_STRNDUP
609extern _X_EXPORT char *
610strndup(const char *str, size_t n);
611#endif
612
613#ifndef HAVE_TIMINGSAFE_MEMCMP
614extern _X_EXPORT int
615timingsafe_memcmp(const void *b1, const void *b2, size_t len);
616#endif
617
618/* Logging. */
619typedef enum _LogParameter {
620    XLOG_FLUSH,
621    XLOG_SYNC,
622    XLOG_VERBOSITY,
623    XLOG_FILE_VERBOSITY
624} LogParameter;
625
626/* Flags for log messages. */
627typedef enum {
628    X_PROBED,                   /* Value was probed */
629    X_CONFIG,                   /* Value was given in the config file */
630    X_DEFAULT,                  /* Value is a default */
631    X_CMDLINE,                  /* Value was given on the command line */
632    X_NOTICE,                   /* Notice */
633    X_ERROR,                    /* Error message */
634    X_WARNING,                  /* Warning message */
635    X_INFO,                     /* Informational message */
636    X_NONE,                     /* No prefix */
637    X_NOT_IMPLEMENTED,          /* Not implemented */
638    X_DEBUG,                    /* Debug message */
639    X_UNKNOWN = -1              /* unknown -- this must always be last */
640} MessageType;
641
642extern _X_EXPORT const char *
643LogInit(const char *fname, const char *backup);
644extern void
645LogSetDisplay(void);
646extern _X_EXPORT void
647LogClose(enum ExitCode error);
648extern _X_EXPORT Bool
649LogSetParameter(LogParameter param, int value);
650extern _X_EXPORT void
651LogVWrite(int verb, const char *f, va_list args)
652_X_ATTRIBUTE_PRINTF(2, 0);
653extern _X_EXPORT void
654LogWrite(int verb, const char *f, ...)
655_X_ATTRIBUTE_PRINTF(2, 3);
656extern _X_EXPORT void
657LogVMessageVerb(MessageType type, int verb, const char *format, va_list args)
658_X_ATTRIBUTE_PRINTF(3, 0);
659extern _X_EXPORT void
660LogMessageVerb(MessageType type, int verb, const char *format, ...)
661_X_ATTRIBUTE_PRINTF(3, 4);
662extern _X_EXPORT void
663LogMessage(MessageType type, const char *format, ...)
664_X_ATTRIBUTE_PRINTF(2, 3);
665extern _X_EXPORT void
666LogMessageVerbSigSafe(MessageType type, int verb, const char *format, ...)
667_X_ATTRIBUTE_PRINTF(3, 4);
668extern _X_EXPORT void
669LogVMessageVerbSigSafe(MessageType type, int verb, const char *format, va_list args)
670_X_ATTRIBUTE_PRINTF(3, 0);
671
672extern _X_EXPORT void
673LogVHdrMessageVerb(MessageType type, int verb,
674                   const char *msg_format, va_list msg_args,
675                   const char *hdr_format, va_list hdr_args)
676_X_ATTRIBUTE_PRINTF(3, 0)
677_X_ATTRIBUTE_PRINTF(5, 0);
678extern _X_EXPORT void
679LogHdrMessageVerb(MessageType type, int verb,
680                  const char *msg_format, va_list msg_args,
681                  const char *hdr_format, ...)
682_X_ATTRIBUTE_PRINTF(3, 0)
683_X_ATTRIBUTE_PRINTF(5, 6);
684extern _X_EXPORT void
685LogHdrMessage(MessageType type, const char *msg_format,
686              va_list msg_args, const char *hdr_format, ...)
687_X_ATTRIBUTE_PRINTF(2, 0)
688_X_ATTRIBUTE_PRINTF(4, 5);
689
690extern _X_EXPORT void
691FreeAuditTimer(void);
692extern _X_EXPORT void
693AuditF(const char *f, ...)
694_X_ATTRIBUTE_PRINTF(1, 2);
695extern _X_EXPORT void
696VAuditF(const char *f, va_list args)
697_X_ATTRIBUTE_PRINTF(1, 0);
698extern _X_EXPORT void
699FatalError(const char *f, ...)
700_X_ATTRIBUTE_PRINTF(1, 2)
701    _X_NORETURN;
702
703#ifdef DEBUG
704#define DebugF ErrorF
705#else
706#define DebugF(...)             /* */
707#endif
708
709extern _X_EXPORT void
710VErrorF(const char *f, va_list args)
711_X_ATTRIBUTE_PRINTF(1, 0);
712extern _X_EXPORT void
713ErrorF(const char *f, ...)
714_X_ATTRIBUTE_PRINTF(1, 2);
715extern _X_EXPORT void
716VErrorFSigSafe(const char *f, va_list args)
717_X_ATTRIBUTE_PRINTF(1, 0);
718extern _X_EXPORT void
719ErrorFSigSafe(const char *f, ...)
720_X_ATTRIBUTE_PRINTF(1, 2);
721extern _X_EXPORT void
722LogPrintMarkers(void);
723
724extern _X_EXPORT void
725xorg_backtrace(void);
726
727extern _X_EXPORT int
728os_move_fd(int fd);
729
730#include <signal.h>
731
732extern _X_EXPORT int
733xthread_sigmask(int how, const sigset_t *set, sigset_t *oldest);
734
735#endif                          /* OS_H */
736