os.h revision 706f2543
11.12Scegger/***********************************************************
21.1Sjmcneill
31.1SjmcneillCopyright 1987, 1998  The Open Group
41.1Sjmcneill
51.1SjmcneillPermission to use, copy, modify, distribute, and sell this software and its
61.1Sjmcneilldocumentation for any purpose is hereby granted without fee, provided that
71.1Sjmcneillthe above copyright notice appear in all copies and that both that
81.1Sjmcneillcopyright notice and this permission notice appear in supporting
91.1Sjmcneilldocumentation.
101.1Sjmcneill
111.1SjmcneillThe above copyright notice and this permission notice shall be included in
121.1Sjmcneillall copies or substantial portions of the Software.
131.1Sjmcneill
141.1SjmcneillTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
151.1SjmcneillIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
161.1SjmcneillFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
171.1SjmcneillOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
181.1SjmcneillAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
191.1SjmcneillCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
201.1Sjmcneill
211.1SjmcneillExcept as contained in this notice, the name of The Open Group shall not be
221.1Sjmcneillused in advertising or otherwise to promote the sale, use or other dealings
231.1Sjmcneillin this Software without prior written authorization from The Open Group.
241.1Sjmcneill
251.9Slukem
261.12SceggerCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
271.9Slukem
281.1Sjmcneill                        All Rights Reserved
291.1Sjmcneill
301.1SjmcneillPermission to use, copy, modify, and distribute this software and its
311.1Sjmcneilldocumentation for any purpose and without fee is hereby granted,
321.1Sjmcneillprovided that the above copyright notice appear in all copies and that
331.1Sjmcneillboth that copyright notice and this permission notice appear in
341.1Sjmcneillsupporting documentation, and that the name of Digital not be
351.1Sjmcneillused in advertising or publicity pertaining to distribution of the
361.1Sjmcneillsoftware without specific, written prior permission.
371.1Sjmcneill
381.1SjmcneillDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
391.1SjmcneillALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
401.1SjmcneillDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
411.1SjmcneillANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
421.1SjmcneillWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
431.1SjmcneillARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
441.1SjmcneillSOFTWARE.
451.10Sdyoung
461.10Sdyoung******************************************************************/
471.1Sjmcneill
481.1Sjmcneill
491.1Sjmcneill#ifndef OS_H
501.1Sjmcneill#define OS_H
511.1Sjmcneill
521.1Sjmcneill#include "misc.h"
531.1Sjmcneill#include <stdarg.h>
541.11Sxtraeme#include <string.h>
551.10Sdyoung
561.10Sdyoung#define SCREEN_SAVER_ON   0
571.10Sdyoung#define SCREEN_SAVER_OFF  1
581.1Sjmcneill#define SCREEN_SAVER_FORCER 2
591.1Sjmcneill#define SCREEN_SAVER_CYCLE  3
601.1Sjmcneill
611.1Sjmcneill#ifndef MAX_REQUEST_SIZE
621.1Sjmcneill#define MAX_REQUEST_SIZE 65535
631.1Sjmcneill#endif
641.10Sdyoung#ifndef MAX_BIG_REQUEST_SIZE
651.1Sjmcneill#define MAX_BIG_REQUEST_SIZE 4194303
661.11Sxtraeme#endif
671.10Sdyoung
681.10Sdyoungtypedef struct _FontPathRec *FontPathPtr;
691.1Sjmcneilltypedef struct _NewClientRec *NewClientPtr;
701.1Sjmcneill
711.1Sjmcneill#ifndef xalloc
721.10Sdyoung#define xnfalloc(size) XNFalloc((unsigned long)(size))
731.10Sdyoung#define xnfcalloc(_num, _size) XNFcalloc((unsigned long)(_num)*(unsigned long)(_size))
741.10Sdyoung#define xnfrealloc(ptr, size) XNFrealloc((pointer)(ptr), (unsigned long)(size))
751.10Sdyoung
761.10Sdyoung#define xalloc(size) Xalloc((unsigned long)(size))
771.10Sdyoung#define xcalloc(_num, _size) Xcalloc((unsigned long)(_num)*(unsigned long)(_size))
781.10Sdyoung#define xrealloc(ptr, size) Xrealloc((pointer)(ptr), (unsigned long)(size))
791.10Sdyoung#define xfree(ptr) Xfree((pointer)(ptr))
801.1Sjmcneill#define xstrdup(s) Xstrdup(s)
811.12Scegger#define xnfstrdup(s) XNFstrdup(s)
821.1Sjmcneill#endif
831.1Sjmcneill
841.1Sjmcneill#include <stdio.h>
851.1Sjmcneill#include <stdarg.h>
861.1Sjmcneill#include <string.h>
871.1Sjmcneill#include <strings.h>
881.1Sjmcneill
891.1Sjmcneill
901.1Sjmcneill#ifdef DDXBEFORERESET
911.1Sjmcneillextern void ddxBeforeReset (void);
921.1Sjmcneill#endif
931.1Sjmcneill
941.1Sjmcneill#ifdef DDXOSVERRORF
951.1Sjmcneillextern _X_EXPORT void (*OsVendorVErrorFProc)(const char *, va_list args);
961.1Sjmcneill#endif
971.10Sdyoung
981.1Sjmcneillextern _X_EXPORT int WaitForSomething(
991.10Sdyoung    int* /*pClientsReady*/
1001.1Sjmcneill);
1011.1Sjmcneill
1021.1Sjmcneillextern _X_EXPORT int ReadRequestFromClient(ClientPtr /*client*/);
1031.1Sjmcneill
1041.1Sjmcneillextern _X_EXPORT Bool InsertFakeRequest(
1051.1Sjmcneill    ClientPtr /*client*/,
1061.1Sjmcneill    char* /*data*/,
1071.1Sjmcneill    int /*count*/);
1081.1Sjmcneill
1091.1Sjmcneillextern _X_EXPORT void ResetCurrentRequest(ClientPtr /*client*/);
1101.1Sjmcneill
1111.1Sjmcneillextern _X_EXPORT void FlushAllOutput(void);
1121.1Sjmcneill
1131.1Sjmcneillextern _X_EXPORT void FlushIfCriticalOutputPending(void);
1141.1Sjmcneill
1151.1Sjmcneillextern _X_EXPORT void SetCriticalOutputPending(void);
1161.1Sjmcneill
1171.1Sjmcneillextern _X_EXPORT int WriteToClient(ClientPtr /*who*/, int /*count*/, const void* /*buf*/);
1181.1Sjmcneill
1191.1Sjmcneillextern _X_EXPORT void ResetOsBuffers(void);
1201.1Sjmcneill
1211.1Sjmcneillextern _X_EXPORT void InitConnectionLimits(void);
1221.1Sjmcneill
1231.1Sjmcneillextern _X_EXPORT void NotifyParentProcess(void);
1241.1Sjmcneill
1251.1Sjmcneillextern _X_EXPORT void CreateWellKnownSockets(void);
1261.1Sjmcneill
1271.1Sjmcneillextern _X_EXPORT void ResetWellKnownSockets(void);
1281.1Sjmcneill
1291.1Sjmcneillextern _X_EXPORT void CloseWellKnownConnections(void);
1301.1Sjmcneill
1311.1Sjmcneillextern _X_EXPORT XID AuthorizationIDOfClient(ClientPtr /*client*/);
1321.1Sjmcneill
1331.1Sjmcneillextern _X_EXPORT char *ClientAuthorized(
1341.1Sjmcneill    ClientPtr /*client*/,
1351.1Sjmcneill    unsigned int /*proto_n*/,
1361.1Sjmcneill    char* /*auth_proto*/,
1371.1Sjmcneill    unsigned int /*string_n*/,
1381.1Sjmcneill    char* /*auth_string*/);
1391.10Sdyoung
1401.1Sjmcneillextern _X_EXPORT Bool EstablishNewConnections(
1411.1Sjmcneill    ClientPtr /*clientUnused*/,
1421.1Sjmcneill    pointer /*closure*/);
1431.1Sjmcneill
1441.1Sjmcneillextern _X_EXPORT void CheckConnections(void);
1451.1Sjmcneill
1461.10Sdyoungextern _X_EXPORT void CloseDownConnection(ClientPtr /*client*/);
1471.10Sdyoung
1481.10Sdyoungextern _X_EXPORT void AddGeneralSocket(int /*fd*/);
1491.10Sdyoung
1501.10Sdyoungextern _X_EXPORT void RemoveGeneralSocket(int /*fd*/);
1511.10Sdyoung
1521.10Sdyoungextern _X_EXPORT void AddEnabledDevice(int /*fd*/);
1531.10Sdyoung
1541.10Sdyoungextern _X_EXPORT void RemoveEnabledDevice(int /*fd*/);
1551.10Sdyoung
1561.10Sdyoungextern _X_EXPORT int OnlyListenToOneClient(ClientPtr /*client*/);
1571.10Sdyoung
1581.10Sdyoungextern _X_EXPORT void ListenToAllClients(void);
1591.10Sdyoung
1601.10Sdyoungextern _X_EXPORT void IgnoreClient(ClientPtr /*client*/);
1611.10Sdyoung
1621.10Sdyoungextern _X_EXPORT void AttendClient(ClientPtr /*client*/);
1631.1Sjmcneill
1641.1Sjmcneillextern _X_EXPORT void MakeClientGrabImpervious(ClientPtr /*client*/);
1651.4Sperry
1661.1Sjmcneillextern _X_EXPORT void MakeClientGrabPervious(ClientPtr /*client*/);
1671.1Sjmcneill
1681.1Sjmcneill#ifdef XQUARTZ
1691.1Sjmcneillextern void ListenOnOpenFD(int /* fd */, int /* noxauth */);
1701.1Sjmcneill#endif
1711.1Sjmcneill
1721.1Sjmcneillextern _X_EXPORT CARD32 GetTimeInMillis(void);
1731.1Sjmcneill
1741.1Sjmcneillextern _X_EXPORT void AdjustWaitForDelay(
1751.1Sjmcneill    pointer /*waitTime*/,
1761.5Sperry    unsigned long /*newdelay*/);
1771.1Sjmcneill
1781.1Sjmcneilltypedef	struct _OsTimerRec *OsTimerPtr;
1791.1Sjmcneill
1801.1Sjmcneilltypedef CARD32 (*OsTimerCallback)(
1811.1Sjmcneill    OsTimerPtr /* timer */,
1821.1Sjmcneill    CARD32 /* time */,
1831.1Sjmcneill    pointer /* arg */);
1841.1Sjmcneill
1851.1Sjmcneillextern _X_EXPORT void TimerInit(void);
1861.1Sjmcneill
1871.1Sjmcneillextern _X_EXPORT Bool TimerForce(OsTimerPtr /* timer */);
1881.1Sjmcneill
1891.1Sjmcneill#define TimerAbsolute (1<<0)
1901.5Sperry#define TimerForceOld (1<<1)
1911.1Sjmcneill
1921.1Sjmcneillextern _X_EXPORT OsTimerPtr TimerSet(
1931.1Sjmcneill    OsTimerPtr /* timer */,
1941.1Sjmcneill    int /* flags */,
1951.1Sjmcneill    CARD32 /* millis */,
1961.1Sjmcneill    OsTimerCallback /* func */,
1971.1Sjmcneill    pointer /* arg */);
1981.1Sjmcneill
1991.1Sjmcneillextern _X_EXPORT void TimerCheck(void);
2001.1Sjmcneillextern _X_EXPORT void TimerCancel(OsTimerPtr /* pTimer */);
2011.1Sjmcneillextern _X_EXPORT void TimerFree(OsTimerPtr /* pTimer */);
2021.1Sjmcneill
2031.1Sjmcneillextern _X_EXPORT void SetScreenSaverTimer(void);
2041.1Sjmcneillextern _X_EXPORT void FreeScreenSaverTimer(void);
2051.1Sjmcneill
2061.1Sjmcneillextern _X_EXPORT void AutoResetServer(int /*sig*/);
2071.5Sperry
2081.1Sjmcneillextern _X_EXPORT void GiveUp(int /*sig*/);
2091.1Sjmcneill
2101.1Sjmcneillextern _X_EXPORT void UseMsg(void);
2111.1Sjmcneill
2121.1Sjmcneillextern _X_EXPORT void ProcessCommandLine(int /*argc*/, char* /*argv*/[]);
2131.1Sjmcneill
2141.1Sjmcneillextern _X_EXPORT int set_font_authorizations(
2151.1Sjmcneill    char ** /* authorizations */,
2161.1Sjmcneill    int * /*authlen */,
2171.1Sjmcneill    pointer /* client */);
2181.1Sjmcneill
2191.1Sjmcneill#ifndef _HAVE_XALLOC_DECLS
2201.1Sjmcneill#define _HAVE_XALLOC_DECLS
2211.1Sjmcneill
2221.1Sjmcneill/*
2231.1Sjmcneill * These causes all sorts of warnings->errors in the xsrc build.
224 */
225#ifdef __NetBSD__
226#undef _X_DEPRECATED
227#define _X_DEPRECATED
228#endif
229
230/*
231 * Use malloc(3) instead.
232 */
233extern _X_EXPORT void *Xalloc(unsigned long /*amount*/) _X_DEPRECATED;
234/*
235 * Use calloc(3) instead
236 */
237extern _X_EXPORT void *Xcalloc(unsigned long /*amount*/) _X_DEPRECATED;
238/*
239 * Use realloc(3) instead
240 */
241extern _X_EXPORT void *Xrealloc(void * /*ptr*/, unsigned long /*amount*/)
242    _X_DEPRECATED;
243/*
244 * Use free(3) instead
245 */
246extern _X_EXPORT void Xfree(void * /*ptr*/) _X_DEPRECATED;
247
248#endif
249
250/*
251 * This function malloc(3)s buffer, terminating the server if there is not
252 * enough memory.
253 */
254extern _X_EXPORT void *XNFalloc(unsigned long /*amount*/);
255/*
256 * This function calloc(3)s buffer, terminating the server if there is not
257 * enough memory.
258 */
259extern _X_EXPORT void *XNFcalloc(unsigned long /*amount*/);
260/*
261 * This function realloc(3)s passed buffer, terminating the server if there is
262 * not enough memory.
263 */
264extern _X_EXPORT void *XNFrealloc(void * /*ptr*/, unsigned long /*amount*/);
265
266/*
267 * This function strdup(3)s passed string. The only difference from the library
268 * function that it is safe to pass NULL, as NULL will be returned.
269 */
270extern _X_EXPORT char *Xstrdup(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 *XNFstrdup(const char *s);
277
278/* Include new X*asprintf API */
279#include "Xprintf.h"
280
281/* Older api deprecated in favor of the asprintf versions */
282extern _X_EXPORT char *Xprintf(const char *fmt, ...) _X_ATTRIBUTE_PRINTF(1,2) _X_DEPRECATED;
283extern _X_EXPORT char *Xvprintf(const char *fmt, va_list va)_X_ATTRIBUTE_PRINTF(1,0) _X_DEPRECATED;
284extern _X_EXPORT char *XNFprintf(const char *fmt, ...) _X_ATTRIBUTE_PRINTF(1,2) _X_DEPRECATED;
285extern _X_EXPORT char *XNFvprintf(const char *fmt, va_list va)_X_ATTRIBUTE_PRINTF(1,0) _X_DEPRECATED;
286
287typedef void (*OsSigHandlerPtr)(int /* sig */);
288typedef int (*OsSigWrapperPtr)(int /* sig */);
289
290extern _X_EXPORT OsSigHandlerPtr OsSignal(int /* sig */, OsSigHandlerPtr /* handler */);
291extern _X_EXPORT OsSigWrapperPtr OsRegisterSigWrapper(OsSigWrapperPtr newWrap);
292
293extern _X_EXPORT int auditTrailLevel;
294
295extern _X_EXPORT void LockServer(void);
296extern _X_EXPORT void UnlockServer(void);
297
298extern _X_EXPORT int OsLookupColor(
299    int	/*screen*/,
300    char * /*name*/,
301    unsigned /*len*/,
302    unsigned short * /*pred*/,
303    unsigned short * /*pgreen*/,
304    unsigned short * /*pblue*/);
305
306extern _X_EXPORT void OsInit(void);
307
308extern _X_EXPORT void OsCleanup(Bool);
309
310extern _X_EXPORT void OsVendorFatalError(void);
311
312extern _X_EXPORT void OsVendorInit(void);
313
314extern _X_EXPORT void OsBlockSignals (void);
315
316extern _X_EXPORT void OsReleaseSignals (void);
317
318extern _X_EXPORT void OsAbort (void) _X_NORETURN;
319
320#if !defined(WIN32)
321extern _X_EXPORT int System(char *);
322extern _X_EXPORT pointer Popen(char *, char *);
323extern _X_EXPORT int Pclose(pointer);
324extern _X_EXPORT pointer Fopen(char *, char *);
325extern _X_EXPORT int Fclose(pointer);
326#else
327#define System(a) system(a)
328#define Popen(a,b) popen(a,b)
329#define Pclose(a) pclose(a)
330#define Fopen(a,b) fopen(a,b)
331#define Fclose(a) fclose(a)
332#endif
333
334extern _X_EXPORT void CheckUserParameters(int argc, char **argv, char **envp);
335extern _X_EXPORT void CheckUserAuthorization(void);
336
337extern _X_EXPORT int AddHost(
338    ClientPtr	/*client*/,
339    int         /*family*/,
340    unsigned    /*length*/,
341    const void */*pAddr*/);
342
343extern _X_EXPORT Bool ForEachHostInFamily (
344    int	    /*family*/,
345    Bool    (* /*func*/ )(
346            unsigned char * /* addr */,
347            short           /* len */,
348            pointer         /* closure */),
349    pointer /*closure*/);
350
351extern _X_EXPORT int RemoveHost(
352    ClientPtr	/*client*/,
353    int         /*family*/,
354    unsigned    /*length*/,
355    pointer     /*pAddr*/);
356
357extern _X_EXPORT int GetHosts(
358    pointer * /*data*/,
359    int	    * /*pnHosts*/,
360    int	    * /*pLen*/,
361    BOOL    * /*pEnabled*/);
362
363typedef struct sockaddr * sockaddrPtr;
364
365extern _X_EXPORT int InvalidHost(sockaddrPtr /*saddr*/, int /*len*/, ClientPtr client);
366
367extern _X_EXPORT int LocalClient(ClientPtr /* client */);
368
369extern _X_EXPORT int LocalClientCred(ClientPtr, int *, int *);
370
371#define LCC_UID_SET	(1 << 0)
372#define LCC_GID_SET	(1 << 1)
373#define LCC_PID_SET	(1 << 2)
374#define LCC_ZID_SET	(1 << 3)
375
376typedef struct {
377    int fieldsSet;	/* Bit mask of fields set */
378    int	euid;		/* Effective uid */
379    int egid;		/* Primary effective group id */
380    int nSuppGids;	/* Number of supplementary group ids */
381    int *pSuppGids;	/* Array of supplementary group ids */
382    int pid;		/* Process id */
383    int zoneid;		/* Only set on Solaris 10 & later */
384} LocalClientCredRec;
385
386extern _X_EXPORT int GetLocalClientCreds(ClientPtr, LocalClientCredRec **);
387extern _X_EXPORT void FreeLocalClientCreds(LocalClientCredRec *);
388
389extern _X_EXPORT int ChangeAccessControl(ClientPtr /*client*/, int /*fEnabled*/);
390
391extern _X_EXPORT int GetAccessControl(void);
392
393
394extern _X_EXPORT void AddLocalHosts(void);
395
396extern _X_EXPORT void ResetHosts(char *display);
397
398extern _X_EXPORT void EnableLocalHost(void);
399
400extern _X_EXPORT void DisableLocalHost(void);
401
402extern _X_EXPORT void AccessUsingXdmcp(void);
403
404extern _X_EXPORT void DefineSelf(int /*fd*/);
405
406#if XDMCP
407extern _X_EXPORT void AugmentSelf(pointer /*from*/, int /*len*/);
408
409extern _X_EXPORT void RegisterAuthorizations(void);
410#endif
411
412extern _X_EXPORT void InitAuthorization(char * /*filename*/);
413
414/* extern int LoadAuthorization(void); */
415
416extern _X_EXPORT int AuthorizationFromID (
417	XID 		id,
418	unsigned short	*name_lenp,
419	char		**namep,
420	unsigned short	*data_lenp,
421	char		**datap);
422
423extern _X_EXPORT XID CheckAuthorization(
424    unsigned int /*namelength*/,
425    const char * /*name*/,
426    unsigned int /*datalength*/,
427    const char * /*data*/,
428    ClientPtr /*client*/,
429    char ** /*reason*/
430);
431
432extern _X_EXPORT void ResetAuthorization(void);
433
434extern _X_EXPORT int RemoveAuthorization (
435    unsigned short	name_length,
436    const char		*name,
437    unsigned short	data_length,
438    const char		*data);
439
440extern _X_EXPORT int AddAuthorization(
441    unsigned int	/*name_length*/,
442    const char *	/*name*/,
443    unsigned int	/*data_length*/,
444    char *		/*data*/);
445
446#ifdef XCSECURITY
447extern _X_EXPORT XID GenerateAuthorization(
448    unsigned int   /* name_length */,
449    const char	*  /* name */,
450    unsigned int   /* data_length */,
451    const char	*  /* data */,
452    unsigned int * /* data_length_return */,
453    char	** /* data_return */);
454#endif
455
456extern _X_EXPORT int ddxProcessArgument(int /*argc*/, char * /*argv*/ [], int /*i*/);
457
458extern _X_EXPORT void ddxUseMsg(void);
459
460/* stuff for ReplyCallback */
461extern _X_EXPORT CallbackListPtr ReplyCallback;
462typedef struct {
463    ClientPtr client;
464    const void *replyData;
465    unsigned long dataLenBytes;
466    unsigned long bytesRemaining;
467    Bool startOfReply;
468} ReplyInfoRec;
469
470/* stuff for FlushCallback */
471extern _X_EXPORT CallbackListPtr FlushCallback;
472
473extern _X_EXPORT void AbortDDX(void);
474extern _X_EXPORT void ddxGiveUp(void);
475extern _X_EXPORT int TimeSinceLastInputEvent(void);
476
477/* strcasecmp.c */
478#if NEED_STRCASECMP
479#define strcasecmp xstrcasecmp
480extern _X_EXPORT int xstrcasecmp(const char *s1, const char *s2);
481#endif
482
483#if NEED_STRNCASECMP
484#define strncasecmp xstrncasecmp
485extern _X_EXPORT int xstrncasecmp(const char *s1, const char *s2, size_t n);
486#endif
487
488#if NEED_STRCASESTR
489#define strcasestr xstrcasestr
490extern _X_EXPORT char *xstrcasestr(const char *s, const char *find);
491#endif
492
493#ifndef HAS_STRLCPY
494extern _X_EXPORT size_t strlcpy(char *dst, const char *src, size_t siz);
495extern _X_EXPORT size_t strlcat(char *dst, const char *src, size_t siz);
496#endif
497
498/* Logging. */
499typedef enum _LogParameter {
500    XLOG_FLUSH,
501    XLOG_SYNC,
502    XLOG_VERBOSITY,
503    XLOG_FILE_VERBOSITY
504} LogParameter;
505
506/* Flags for log messages. */
507typedef enum {
508    X_PROBED,			/* Value was probed */
509    X_CONFIG,			/* Value was given in the config file */
510    X_DEFAULT,			/* Value is a default */
511    X_CMDLINE,			/* Value was given on the command line */
512    X_NOTICE,			/* Notice */
513    X_ERROR,			/* Error message */
514    X_WARNING,			/* Warning message */
515    X_INFO,			/* Informational message */
516    X_NONE,			/* No prefix */
517    X_NOT_IMPLEMENTED,		/* Not implemented */
518    X_UNKNOWN = -1		/* unknown -- this must always be last */
519} MessageType;
520
521extern _X_EXPORT const char *LogInit(const char *fname, const char *backup);
522extern _X_EXPORT void LogClose(void);
523extern _X_EXPORT Bool LogSetParameter(LogParameter param, int value);
524extern _X_EXPORT void LogVWrite(int verb, const char *f, va_list args);
525extern _X_EXPORT void LogWrite(int verb, const char *f, ...) _X_ATTRIBUTE_PRINTF(2,3);
526extern _X_EXPORT void LogVMessageVerb(MessageType type, int verb, const char *format,
527			    va_list args);
528extern _X_EXPORT void LogMessageVerb(MessageType type, int verb, const char *format,
529			   ...) _X_ATTRIBUTE_PRINTF(3,4);
530extern _X_EXPORT void LogMessage(MessageType type, const char *format, ...)
531			_X_ATTRIBUTE_PRINTF(2,3);
532extern _X_EXPORT void FreeAuditTimer(void);
533extern _X_EXPORT void AuditF(const char *f, ...) _X_ATTRIBUTE_PRINTF(1,2);
534extern _X_EXPORT void VAuditF(const char *f, va_list args);
535extern _X_EXPORT void FatalError(const char *f, ...) _X_ATTRIBUTE_PRINTF(1,2) _X_NORETURN;
536
537#ifdef DEBUG
538#define DebugF ErrorF
539#else
540#define DebugF(...) /* */
541#endif
542
543extern _X_EXPORT void VErrorF(const char *f, va_list args);
544extern _X_EXPORT void ErrorF(const char *f, ...) _X_ATTRIBUTE_PRINTF(1,2);
545extern _X_EXPORT void Error(const char *str);
546extern _X_EXPORT void LogPrintMarkers(void);
547
548extern _X_EXPORT void xorg_backtrace(void);
549
550#endif /* OS_H */
551