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