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