xserver

xserver with xephyr scale patch
git clone https://git.neptards.moe/u3shit/xserver.git
Log | Files | Refs | README | LICENSE

os.h (21144B)


      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 NotifyParentProcess(void);
    131 
    132 extern _X_EXPORT void CreateWellKnownSockets(void);
    133 
    134 extern _X_EXPORT void ResetWellKnownSockets(void);
    135 
    136 extern _X_EXPORT void CloseWellKnownConnections(void);
    137 
    138 extern _X_EXPORT XID AuthorizationIDOfClient(ClientPtr /*client */ );
    139 
    140 extern _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 
    146 extern _X_EXPORT void CloseDownConnection(ClientPtr /*client */ );
    147 
    148 typedef 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 
    155 extern _X_EXPORT Bool SetNotifyFd(int fd, NotifyFdProcPtr notify_fd, int mask, void *data);
    156 
    157 static inline void RemoveNotifyFd(int fd)
    158 {
    159     (void) SetNotifyFd(fd, NULL, X_NOTIFY_NONE, NULL);
    160 }
    161 
    162 extern _X_EXPORT int OnlyListenToOneClient(ClientPtr /*client */ );
    163 
    164 extern _X_EXPORT void ListenToAllClients(void);
    165 
    166 extern _X_EXPORT void IgnoreClient(ClientPtr /*client */ );
    167 
    168 extern _X_EXPORT void AttendClient(ClientPtr /*client */ );
    169 
    170 extern _X_EXPORT void MakeClientGrabImpervious(ClientPtr /*client */ );
    171 
    172 extern _X_EXPORT void MakeClientGrabPervious(ClientPtr /*client */ );
    173 
    174 extern _X_EXPORT void ListenOnOpenFD(int /* fd */ , int /* noxauth */ );
    175 
    176 extern _X_EXPORT Bool AddClientOnOpenFD(int /* fd */ );
    177 
    178 #ifdef MONOTONIC_CLOCK
    179 extern void ForceClockId(clockid_t /* forced_clockid */);
    180 #endif
    181 
    182 extern _X_EXPORT CARD32 GetTimeInMillis(void);
    183 extern _X_EXPORT CARD64 GetTimeInMicros(void);
    184 
    185 extern _X_EXPORT void AdjustWaitForDelay(void *waitTime, int newdelay);
    186 
    187 typedef struct _OsTimerRec *OsTimerPtr;
    188 
    189 typedef CARD32 (*OsTimerCallback) (OsTimerPtr timer,
    190                                    CARD32 time,
    191                                    void *arg);
    192 
    193 extern _X_EXPORT void TimerInit(void);
    194 
    195 extern _X_EXPORT Bool TimerForce(OsTimerPtr /* timer */ );
    196 
    197 #define TimerAbsolute (1<<0)
    198 #define TimerForceOld (1<<1)
    199 
    200 extern _X_EXPORT OsTimerPtr TimerSet(OsTimerPtr timer,
    201                                      int flags,
    202                                      CARD32 millis,
    203                                      OsTimerCallback func,
    204                                      void *arg);
    205 
    206 extern _X_EXPORT void TimerCheck(void);
    207 extern _X_EXPORT void TimerCancel(OsTimerPtr /* pTimer */ );
    208 extern _X_EXPORT void TimerFree(OsTimerPtr /* pTimer */ );
    209 
    210 extern _X_EXPORT void SetScreenSaverTimer(void);
    211 extern _X_EXPORT void FreeScreenSaverTimer(void);
    212 
    213 extern _X_EXPORT void AutoResetServer(int /*sig */ );
    214 
    215 extern _X_EXPORT void GiveUp(int /*sig */ );
    216 
    217 extern _X_EXPORT void UseMsg(void);
    218 
    219 extern _X_EXPORT void ProcessCommandLine(int /*argc */ , char * /*argv */ []);
    220 
    221 extern _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  */
    229 extern _X_EXPORT void *
    230 XNFalloc(unsigned long /*amount */ );
    231 
    232 /*
    233  * This function calloc(3)s buffer, terminating the server if there is not
    234  * enough memory.
    235  */
    236 extern _X_EXPORT void *
    237 XNFcalloc(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  */
    243 extern _X_EXPORT void *
    244 XNFcallocarray(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  */
    250 extern _X_EXPORT void *
    251 XNFrealloc(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  */
    257 extern _X_EXPORT void *
    258 XNFreallocarray(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  */
    264 extern _X_EXPORT char *
    265 Xstrdup(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  */
    271 extern _X_EXPORT char *
    272 XNFstrdup(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 */
    278 extern _X_EXPORT char *
    279 Xprintf(const char *fmt, ...)
    280 _X_ATTRIBUTE_PRINTF(1, 2)
    281     _X_DEPRECATED;
    282 extern _X_EXPORT char *
    283 Xvprintf(const char *fmt, va_list va)
    284 _X_ATTRIBUTE_PRINTF(1, 0)
    285     _X_DEPRECATED;
    286 extern _X_EXPORT char *
    287 XNFprintf(const char *fmt, ...)
    288 _X_ATTRIBUTE_PRINTF(1, 2)
    289     _X_DEPRECATED;
    290 extern _X_EXPORT char *
    291 XNFvprintf(const char *fmt, va_list va)
    292 _X_ATTRIBUTE_PRINTF(1, 0)
    293     _X_DEPRECATED;
    294 
    295 typedef void (*OsSigHandlerPtr) (int /* sig */ );
    296 typedef int (*OsSigWrapperPtr) (int /* sig */ );
    297 
    298 extern _X_EXPORT OsSigHandlerPtr
    299 OsSignal(int /* sig */ , OsSigHandlerPtr /* handler */ );
    300 extern _X_EXPORT OsSigWrapperPtr
    301 OsRegisterSigWrapper(OsSigWrapperPtr newWrap);
    302 
    303 extern _X_EXPORT int auditTrailLevel;
    304 
    305 extern _X_EXPORT void
    306 LockServer(void);
    307 extern _X_EXPORT void
    308 UnlockServer(void);
    309 
    310 extern _X_EXPORT int
    311 OsLookupColor(int /*screen */ ,
    312               char * /*name */ ,
    313               unsigned /*len */ ,
    314               unsigned short * /*pred */ ,
    315               unsigned short * /*pgreen */ ,
    316               unsigned short * /*pblue */ );
    317 
    318 extern _X_EXPORT void
    319 OsInit(void);
    320 
    321 extern _X_EXPORT void
    322 OsCleanup(Bool);
    323 
    324 extern _X_EXPORT void
    325 OsVendorFatalError(const char *f, va_list args)
    326 _X_ATTRIBUTE_PRINTF(1, 0);
    327 
    328 extern _X_EXPORT void
    329 OsVendorInit(void);
    330 
    331 extern _X_EXPORT void
    332 OsBlockSignals(void);
    333 
    334 extern _X_EXPORT void
    335 OsReleaseSignals(void);
    336 
    337 extern void
    338 OsResetSignals(void);
    339 
    340 extern _X_EXPORT void
    341 OsAbort(void)
    342     _X_NORETURN;
    343 
    344 #if !defined(WIN32)
    345 extern _X_EXPORT int
    346 System(const char *);
    347 extern _X_EXPORT void *
    348 Popen(const char *, const char *);
    349 extern _X_EXPORT int
    350 Pclose(void *);
    351 extern _X_EXPORT void *
    352 Fopen(const char *, const char *);
    353 extern _X_EXPORT int
    354 Fclose(void *);
    355 #else
    356 
    357 extern const char *
    358 Win32TempDir(void);
    359 
    360 extern int
    361 System(const char *cmdline);
    362 
    363 #define Fopen(a,b) fopen(a,b)
    364 #define Fclose(a) fclose(a)
    365 #endif
    366 
    367 extern _X_EXPORT Bool
    368 PrivsElevated(void);
    369 
    370 extern _X_EXPORT void
    371 CheckUserParameters(int argc, char **argv, char **envp);
    372 extern _X_EXPORT void
    373 CheckUserAuthorization(void);
    374 
    375 extern _X_EXPORT int
    376 AddHost(ClientPtr /*client */ ,
    377         int /*family */ ,
    378         unsigned /*length */ ,
    379         const void * /*pAddr */ );
    380 
    381 extern _X_EXPORT Bool
    382 ForEachHostInFamily(int family,
    383                     Bool (*func)(
    384                                            unsigned char *addr,
    385                                            short len,
    386                                            void *closure),
    387                     void *closure);
    388 
    389 extern _X_EXPORT int
    390 RemoveHost(ClientPtr client,
    391            int family,
    392            unsigned length,
    393            void *pAddr);
    394 
    395 extern _X_EXPORT int
    396 GetHosts(void ** /*data */ ,
    397          int * /*pnHosts */ ,
    398          int * /*pLen */ ,
    399          BOOL * /*pEnabled */ );
    400 
    401 typedef struct sockaddr *sockaddrPtr;
    402 
    403 extern _X_EXPORT int
    404 InvalidHost(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 
    411 typedef 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 
    421 extern _X_EXPORT int
    422 GetLocalClientCreds(ClientPtr, LocalClientCredRec **);
    423 
    424 extern _X_EXPORT void
    425 FreeLocalClientCreds(LocalClientCredRec *);
    426 
    427 extern _X_EXPORT int
    428 ChangeAccessControl(ClientPtr /*client */ , int /*fEnabled */ );
    429 
    430 extern _X_EXPORT int
    431 GetClientFd(ClientPtr);
    432 
    433 extern _X_EXPORT Bool
    434 ClientIsLocal(ClientPtr client);
    435 
    436 extern _X_EXPORT int
    437 GetAccessControl(void);
    438 
    439 extern _X_EXPORT void
    440 AddLocalHosts(void);
    441 
    442 extern _X_EXPORT void
    443 ResetHosts(const char *display);
    444 
    445 extern _X_EXPORT void
    446 EnableLocalAccess(void);
    447 
    448 extern _X_EXPORT void
    449 DisableLocalAccess(void);
    450 
    451 extern _X_EXPORT void
    452 EnableLocalHost(void);
    453 
    454 extern _X_EXPORT void
    455 DisableLocalHost(void);
    456 
    457 #ifndef NO_LOCAL_CLIENT_CRED
    458 extern _X_EXPORT void
    459 EnableLocalUser(void);
    460 
    461 extern _X_EXPORT void
    462 DisableLocalUser(void);
    463 
    464 extern _X_EXPORT void
    465 LocalAccessScopeUser(void);
    466 #endif
    467 
    468 extern _X_EXPORT void
    469 AccessUsingXdmcp(void);
    470 
    471 extern _X_EXPORT void
    472 DefineSelf(int /*fd */ );
    473 
    474 #ifdef XDMCP
    475 extern _X_EXPORT void
    476 AugmentSelf(void *from, int len);
    477 
    478 extern _X_EXPORT void
    479 RegisterAuthorizations(void);
    480 #endif
    481 
    482 extern _X_EXPORT void
    483 InitAuthorization(const char * /*filename */ );
    484 
    485 /* extern int LoadAuthorization(void); */
    486 
    487 extern _X_EXPORT int
    488 AuthorizationFromID(XID id,
    489                     unsigned short *name_lenp,
    490                     const char **namep,
    491                     unsigned short *data_lenp, char **datap);
    492 
    493 extern _X_EXPORT XID
    494 CheckAuthorization(unsigned int /*namelength */ ,
    495                    const char * /*name */ ,
    496                    unsigned int /*datalength */ ,
    497                    const char * /*data */ ,
    498                    ClientPtr /*client */ ,
    499                    const char **        /*reason */
    500     );
    501 
    502 extern _X_EXPORT void
    503 ResetAuthorization(void);
    504 
    505 extern _X_EXPORT int
    506 RemoveAuthorization(unsigned short name_length,
    507                     const char *name,
    508                     unsigned short data_length, const char *data);
    509 
    510 extern _X_EXPORT int
    511 AddAuthorization(unsigned int /*name_length */ ,
    512                  const char * /*name */ ,
    513                  unsigned int /*data_length */ ,
    514                  char * /*data */ );
    515 
    516 #ifdef XCSECURITY
    517 extern _X_EXPORT XID
    518 GenerateAuthorization(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 
    526 extern _X_EXPORT int
    527 ddxProcessArgument(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 
    536 extern _X_EXPORT void
    537 ddxUseMsg(void);
    538 
    539 /* stuff for ReplyCallback */
    540 extern _X_EXPORT CallbackListPtr ReplyCallback;
    541 typedef 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 */
    551 extern _X_EXPORT CallbackListPtr FlushCallback;
    552 
    553 enum ExitCode {
    554     EXIT_NO_ERROR = 0,
    555     EXIT_ERR_ABORT = 1,
    556     EXIT_ERR_CONFIGURE = 2,
    557     EXIT_ERR_DRIVERS = 3,
    558 };
    559 
    560 extern _X_EXPORT void
    561 ddxGiveUp(enum ExitCode error);
    562 extern _X_EXPORT void
    563 ddxInputThreadInit(void);
    564 extern _X_EXPORT int
    565 TimeSinceLastInputEvent(void);
    566 
    567 /* Function fallbacks provided by AC_REPLACE_FUNCS in configure.ac */
    568 
    569 #ifndef HAVE_REALLOCARRAY
    570 #define reallocarray xreallocarray
    571 extern _X_EXPORT void *
    572 reallocarray(void *optr, size_t nmemb, size_t size);
    573 #endif
    574 
    575 #ifndef HAVE_STRCASECMP
    576 #define strcasecmp xstrcasecmp
    577 extern _X_EXPORT int
    578 xstrcasecmp(const char *s1, const char *s2);
    579 #endif
    580 
    581 #ifndef HAVE_STRNCASECMP
    582 #define strncasecmp xstrncasecmp
    583 extern _X_EXPORT int
    584 xstrncasecmp(const char *s1, const char *s2, size_t n);
    585 #endif
    586 
    587 #ifndef HAVE_STRCASESTR
    588 #define strcasestr xstrcasestr
    589 extern _X_EXPORT char *
    590 xstrcasestr(const char *s, const char *find);
    591 #endif
    592 
    593 #ifndef HAVE_STRLCPY
    594 extern _X_EXPORT size_t
    595 strlcpy(char *dst, const char *src, size_t siz);
    596 extern _X_EXPORT size_t
    597 strlcat(char *dst, const char *src, size_t siz);
    598 #endif
    599 
    600 #ifndef HAVE_STRNDUP
    601 extern _X_EXPORT char *
    602 strndup(const char *str, size_t n);
    603 #endif
    604 
    605 #ifndef HAVE_TIMINGSAFE_MEMCMP
    606 extern _X_EXPORT int
    607 timingsafe_memcmp(const void *b1, const void *b2, size_t len);
    608 #endif
    609 
    610 /* Logging. */
    611 typedef enum _LogParameter {
    612     XLOG_FLUSH,
    613     XLOG_SYNC,
    614     XLOG_VERBOSITY,
    615     XLOG_FILE_VERBOSITY
    616 } LogParameter;
    617 
    618 /* Flags for log messages. */
    619 typedef 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 
    634 extern _X_EXPORT const char *
    635 LogInit(const char *fname, const char *backup);
    636 extern void
    637 LogSetDisplay(void);
    638 extern _X_EXPORT void
    639 LogClose(enum ExitCode error);
    640 extern _X_EXPORT Bool
    641 LogSetParameter(LogParameter param, int value);
    642 extern _X_EXPORT void
    643 LogVWrite(int verb, const char *f, va_list args)
    644 _X_ATTRIBUTE_PRINTF(2, 0);
    645 extern _X_EXPORT void
    646 LogWrite(int verb, const char *f, ...)
    647 _X_ATTRIBUTE_PRINTF(2, 3);
    648 extern _X_EXPORT void
    649 LogVMessageVerb(MessageType type, int verb, const char *format, va_list args)
    650 _X_ATTRIBUTE_PRINTF(3, 0);
    651 extern _X_EXPORT void
    652 LogMessageVerb(MessageType type, int verb, const char *format, ...)
    653 _X_ATTRIBUTE_PRINTF(3, 4);
    654 extern _X_EXPORT void
    655 LogMessage(MessageType type, const char *format, ...)
    656 _X_ATTRIBUTE_PRINTF(2, 3);
    657 extern _X_EXPORT void
    658 LogMessageVerbSigSafe(MessageType type, int verb, const char *format, ...)
    659 _X_ATTRIBUTE_PRINTF(3, 4);
    660 extern _X_EXPORT void
    661 LogVMessageVerbSigSafe(MessageType type, int verb, const char *format, va_list args)
    662 _X_ATTRIBUTE_PRINTF(3, 0);
    663 
    664 extern _X_EXPORT void
    665 LogVHdrMessageVerb(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);
    670 extern _X_EXPORT void
    671 LogHdrMessageVerb(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);
    676 extern _X_EXPORT void
    677 LogHdrMessage(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 
    682 extern _X_EXPORT void
    683 FreeAuditTimer(void);
    684 extern _X_EXPORT void
    685 AuditF(const char *f, ...)
    686 _X_ATTRIBUTE_PRINTF(1, 2);
    687 extern _X_EXPORT void
    688 VAuditF(const char *f, va_list args)
    689 _X_ATTRIBUTE_PRINTF(1, 0);
    690 extern _X_EXPORT void
    691 FatalError(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 
    701 extern _X_EXPORT void
    702 VErrorF(const char *f, va_list args)
    703 _X_ATTRIBUTE_PRINTF(1, 0);
    704 extern _X_EXPORT void
    705 ErrorF(const char *f, ...)
    706 _X_ATTRIBUTE_PRINTF(1, 2);
    707 extern _X_EXPORT void
    708 VErrorFSigSafe(const char *f, va_list args)
    709 _X_ATTRIBUTE_PRINTF(1, 0);
    710 extern _X_EXPORT void
    711 ErrorFSigSafe(const char *f, ...)
    712 _X_ATTRIBUTE_PRINTF(1, 2);
    713 extern _X_EXPORT void
    714 LogPrintMarkers(void);
    715 
    716 extern _X_EXPORT void
    717 xorg_backtrace(void);
    718 
    719 extern _X_EXPORT int
    720 os_move_fd(int fd);
    721 
    722 #include <signal.h>
    723 
    724 #if defined(WIN32) && !defined(__CYGWIN__)
    725 typedef _sigset_t sigset_t;
    726 #endif
    727 
    728 extern _X_EXPORT int
    729 xthread_sigmask(int how, const sigset_t *set, sigset_t *oldest);
    730 
    731 #endif                          /* OS_H */