os.h revision 637ac9ab
105b261ecSmrg/***********************************************************
205b261ecSmrg
305b261ecSmrgCopyright 1987, 1998  The Open Group
405b261ecSmrg
505b261ecSmrgPermission to use, copy, modify, distribute, and sell this software and its
605b261ecSmrgdocumentation for any purpose is hereby granted without fee, provided that
705b261ecSmrgthe above copyright notice appear in all copies and that both that
805b261ecSmrgcopyright notice and this permission notice appear in supporting
905b261ecSmrgdocumentation.
1005b261ecSmrg
1105b261ecSmrgThe above copyright notice and this permission notice shall be included in
1205b261ecSmrgall copies or substantial portions of the Software.
1305b261ecSmrg
1405b261ecSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1505b261ecSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1605b261ecSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
1705b261ecSmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
1805b261ecSmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
1905b261ecSmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2005b261ecSmrg
2105b261ecSmrgExcept as contained in this notice, the name of The Open Group shall not be
2205b261ecSmrgused in advertising or otherwise to promote the sale, use or other dealings
2305b261ecSmrgin this Software without prior written authorization from The Open Group.
2405b261ecSmrg
2505b261ecSmrg
2605b261ecSmrgCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
2705b261ecSmrg
2805b261ecSmrg                        All Rights Reserved
2905b261ecSmrg
3005b261ecSmrgPermission to use, copy, modify, and distribute this software and its
3105b261ecSmrgdocumentation for any purpose and without fee is hereby granted,
3205b261ecSmrgprovided that the above copyright notice appear in all copies and that
3305b261ecSmrgboth that copyright notice and this permission notice appear in
3405b261ecSmrgsupporting documentation, and that the name of Digital not be
3505b261ecSmrgused in advertising or publicity pertaining to distribution of the
3605b261ecSmrgsoftware without specific, written prior permission.
3705b261ecSmrg
3805b261ecSmrgDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
3905b261ecSmrgALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
4005b261ecSmrgDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
4105b261ecSmrgANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
4205b261ecSmrgWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
4305b261ecSmrgARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
4405b261ecSmrgSOFTWARE.
4505b261ecSmrg
4605b261ecSmrg******************************************************************/
4705b261ecSmrg
4805b261ecSmrg
4905b261ecSmrg#ifndef OS_H
5005b261ecSmrg#define OS_H
5105b261ecSmrg
5205b261ecSmrg#include "misc.h"
5305b261ecSmrg#include <stdarg.h>
5405b261ecSmrg
5505b261ecSmrg#define NullFID ((FID) 0)
5605b261ecSmrg
5705b261ecSmrg#define SCREEN_SAVER_ON   0
5805b261ecSmrg#define SCREEN_SAVER_OFF  1
5905b261ecSmrg#define SCREEN_SAVER_FORCER 2
6005b261ecSmrg#define SCREEN_SAVER_CYCLE  3
6105b261ecSmrg
6205b261ecSmrg#ifndef MAX_REQUEST_SIZE
6305b261ecSmrg#define MAX_REQUEST_SIZE 65535
6405b261ecSmrg#endif
6505b261ecSmrg#ifndef MAX_BIG_REQUEST_SIZE
6605b261ecSmrg#define MAX_BIG_REQUEST_SIZE 4194303
6705b261ecSmrg#endif
6805b261ecSmrg
6905b261ecSmrgtypedef pointer	FID;
7005b261ecSmrgtypedef struct _FontPathRec *FontPathPtr;
7105b261ecSmrgtypedef struct _NewClientRec *NewClientPtr;
7205b261ecSmrg
7305b261ecSmrg#ifndef xalloc
7405b261ecSmrg#define xnfalloc(size) XNFalloc((unsigned long)(size))
7505b261ecSmrg#define xnfcalloc(_num, _size) XNFcalloc((unsigned long)(_num)*(unsigned long)(_size))
7605b261ecSmrg#define xnfrealloc(ptr, size) XNFrealloc((pointer)(ptr), (unsigned long)(size))
7705b261ecSmrg
7805b261ecSmrg#define xalloc(size) Xalloc((unsigned long)(size))
7905b261ecSmrg#define xcalloc(_num, _size) Xcalloc((unsigned long)(_num)*(unsigned long)(_size))
8005b261ecSmrg#define xrealloc(ptr, size) Xrealloc((pointer)(ptr), (unsigned long)(size))
8105b261ecSmrg#define xfree(ptr) Xfree((pointer)(ptr))
8205b261ecSmrg#define xstrdup(s) Xstrdup(s)
8305b261ecSmrg#define xnfstrdup(s) XNFstrdup(s)
8405b261ecSmrg#endif
8505b261ecSmrg
8605b261ecSmrg#include <stdio.h>
8705b261ecSmrg#include <stdarg.h>
88de0a7c19Smacallan#include <string.h>
89de0a7c19Smacallan#include <strings.h>
90de0a7c19Smacallan
9105b261ecSmrg
9205b261ecSmrg/* have to put $(SIGNAL_DEFINES) in DEFINES in Imakefile to get this right */
9305b261ecSmrg#ifdef SIGNALRETURNSINT
9405b261ecSmrg#define SIGVAL int
9505b261ecSmrg#else
9605b261ecSmrg#define SIGVAL void
9705b261ecSmrg#endif
9805b261ecSmrg
9905b261ecSmrgextern void (*OsVendorVErrorFProc)(const char *, va_list args);
10005b261ecSmrg
10105b261ecSmrgextern int WaitForSomething(
10205b261ecSmrg    int* /*pClientsReady*/
10305b261ecSmrg);
10405b261ecSmrg
10505b261ecSmrgextern int ReadRequestFromClient(ClientPtr /*client*/);
10605b261ecSmrg
10705b261ecSmrgextern Bool InsertFakeRequest(
10805b261ecSmrg    ClientPtr /*client*/,
10905b261ecSmrg    char* /*data*/,
11005b261ecSmrg    int /*count*/);
11105b261ecSmrg
11205b261ecSmrgextern void ResetCurrentRequest(ClientPtr /*client*/);
11305b261ecSmrg
11405b261ecSmrgextern void FlushAllOutput(void);
11505b261ecSmrg
11605b261ecSmrgextern void FlushIfCriticalOutputPending(void);
11705b261ecSmrg
11805b261ecSmrgextern void SetCriticalOutputPending(void);
11905b261ecSmrg
120637ac9abSmrgextern int WriteToClient(ClientPtr /*who*/, int /*count*/, const void* /*buf*/);
12105b261ecSmrg
12205b261ecSmrgextern void ResetOsBuffers(void);
12305b261ecSmrg
12405b261ecSmrgextern void InitConnectionLimits(void);
12505b261ecSmrg
126637ac9abSmrgextern void NotifyParentProcess(void);
127637ac9abSmrg
12805b261ecSmrgextern void CreateWellKnownSockets(void);
12905b261ecSmrg
13005b261ecSmrgextern void ResetWellKnownSockets(void);
13105b261ecSmrg
13205b261ecSmrgextern void CloseWellKnownConnections(void);
13305b261ecSmrg
13405b261ecSmrgextern XID AuthorizationIDOfClient(ClientPtr /*client*/);
13505b261ecSmrg
13605b261ecSmrgextern char *ClientAuthorized(
13705b261ecSmrg    ClientPtr /*client*/,
13805b261ecSmrg    unsigned int /*proto_n*/,
13905b261ecSmrg    char* /*auth_proto*/,
14005b261ecSmrg    unsigned int /*string_n*/,
14105b261ecSmrg    char* /*auth_string*/);
14205b261ecSmrg
14305b261ecSmrgextern Bool EstablishNewConnections(
14405b261ecSmrg    ClientPtr /*clientUnused*/,
14505b261ecSmrg    pointer /*closure*/);
14605b261ecSmrg
14705b261ecSmrgextern void CheckConnections(void);
14805b261ecSmrg
14905b261ecSmrgextern void CloseDownConnection(ClientPtr /*client*/);
15005b261ecSmrg
15105b261ecSmrgextern void AddGeneralSocket(int /*fd*/);
15205b261ecSmrg
15305b261ecSmrgextern void RemoveGeneralSocket(int /*fd*/);
15405b261ecSmrg
15505b261ecSmrgextern void AddEnabledDevice(int /*fd*/);
15605b261ecSmrg
15705b261ecSmrgextern void RemoveEnabledDevice(int /*fd*/);
15805b261ecSmrg
159637ac9abSmrgextern int OnlyListenToOneClient(ClientPtr /*client*/);
16005b261ecSmrg
16105b261ecSmrgextern void ListenToAllClients(void);
16205b261ecSmrg
16305b261ecSmrgextern void IgnoreClient(ClientPtr /*client*/);
16405b261ecSmrg
16505b261ecSmrgextern void AttendClient(ClientPtr /*client*/);
16605b261ecSmrg
16705b261ecSmrgextern void MakeClientGrabImpervious(ClientPtr /*client*/);
16805b261ecSmrg
16905b261ecSmrgextern void MakeClientGrabPervious(ClientPtr /*client*/);
17005b261ecSmrg
171637ac9abSmrg#ifdef XQUARTZ
172637ac9abSmrgextern void ListenOnOpenFD(int /* fd */, int /* noxauth */);
173637ac9abSmrg#endif
17405b261ecSmrg
17505b261ecSmrgextern CARD32 GetTimeInMillis(void);
17605b261ecSmrg
17705b261ecSmrgextern void AdjustWaitForDelay(
17805b261ecSmrg    pointer /*waitTime*/,
17905b261ecSmrg    unsigned long /*newdelay*/);
18005b261ecSmrg
18105b261ecSmrgtypedef	struct _OsTimerRec *OsTimerPtr;
18205b261ecSmrg
18305b261ecSmrgtypedef CARD32 (*OsTimerCallback)(
18405b261ecSmrg    OsTimerPtr /* timer */,
18505b261ecSmrg    CARD32 /* time */,
18605b261ecSmrg    pointer /* arg */);
18705b261ecSmrg
18805b261ecSmrgextern void TimerInit(void);
18905b261ecSmrg
19005b261ecSmrgextern Bool TimerForce(OsTimerPtr /* timer */);
19105b261ecSmrg
19205b261ecSmrg#define TimerAbsolute (1<<0)
19305b261ecSmrg#define TimerForceOld (1<<1)
19405b261ecSmrg
19505b261ecSmrgextern OsTimerPtr TimerSet(
19605b261ecSmrg    OsTimerPtr /* timer */,
19705b261ecSmrg    int /* flags */,
19805b261ecSmrg    CARD32 /* millis */,
19905b261ecSmrg    OsTimerCallback /* func */,
20005b261ecSmrg    pointer /* arg */);
20105b261ecSmrg
20205b261ecSmrgextern void TimerCheck(void);
20305b261ecSmrgextern void TimerCancel(OsTimerPtr /* pTimer */);
20405b261ecSmrgextern void TimerFree(OsTimerPtr /* pTimer */);
20505b261ecSmrg
20605b261ecSmrgextern void SetScreenSaverTimer(void);
20705b261ecSmrgextern void FreeScreenSaverTimer(void);
20805b261ecSmrg
20905b261ecSmrgextern SIGVAL AutoResetServer(int /*sig*/);
21005b261ecSmrg
21105b261ecSmrgextern SIGVAL GiveUp(int /*sig*/);
21205b261ecSmrg
21305b261ecSmrgextern void UseMsg(void);
21405b261ecSmrg
21505b261ecSmrgextern void ProcessCommandLine(int /*argc*/, char* /*argv*/[]);
21605b261ecSmrg
21705b261ecSmrgextern int set_font_authorizations(
21805b261ecSmrg    char ** /* authorizations */,
21905b261ecSmrg    int * /*authlen */,
22005b261ecSmrg    pointer /* client */);
22105b261ecSmrg
22205b261ecSmrg#ifndef _HAVE_XALLOC_DECLS
22305b261ecSmrg#define _HAVE_XALLOC_DECLS
22405b261ecSmrgextern pointer Xalloc(unsigned long /*amount*/);
22505b261ecSmrgextern pointer Xcalloc(unsigned long /*amount*/);
22605b261ecSmrgextern pointer Xrealloc(pointer /*ptr*/, unsigned long /*amount*/);
22705b261ecSmrgextern void Xfree(pointer /*ptr*/);
22805b261ecSmrg#endif
22905b261ecSmrg
23005b261ecSmrgextern pointer XNFalloc(unsigned long /*amount*/);
23105b261ecSmrgextern pointer XNFcalloc(unsigned long /*amount*/);
23205b261ecSmrgextern pointer XNFrealloc(pointer /*ptr*/, unsigned long /*amount*/);
23305b261ecSmrg
23405b261ecSmrgextern char *Xstrdup(const char *s);
23505b261ecSmrgextern char *XNFstrdup(const char *s);
23605b261ecSmrgextern char *Xprintf(const char *fmt, ...);
23705b261ecSmrgextern char *Xvprintf(const char *fmt, va_list va);
23805b261ecSmrgextern char *XNFprintf(const char *fmt, ...);
23905b261ecSmrgextern char *XNFvprintf(const char *fmt, va_list va);
24005b261ecSmrg
24105b261ecSmrgtypedef SIGVAL (*OsSigHandlerPtr)(int /* sig */);
24205b261ecSmrg
24305b261ecSmrgextern OsSigHandlerPtr OsSignal(int /* sig */, OsSigHandlerPtr /* handler */);
24405b261ecSmrg
24505b261ecSmrgextern int auditTrailLevel;
24605b261ecSmrg
24705b261ecSmrgextern void LockServer(void);
24805b261ecSmrgextern void UnlockServer(void);
24905b261ecSmrg
25005b261ecSmrgextern int OsLookupColor(
25105b261ecSmrg    int	/*screen*/,
25205b261ecSmrg    char * /*name*/,
25305b261ecSmrg    unsigned /*len*/,
25405b261ecSmrg    unsigned short * /*pred*/,
25505b261ecSmrg    unsigned short * /*pgreen*/,
25605b261ecSmrg    unsigned short * /*pblue*/);
25705b261ecSmrg
25805b261ecSmrgextern void OsInit(void);
25905b261ecSmrg
26005b261ecSmrgextern void OsCleanup(Bool);
26105b261ecSmrg
26205b261ecSmrgextern void OsVendorFatalError(void);
26305b261ecSmrg
26405b261ecSmrgextern void OsVendorInit(void);
26505b261ecSmrg
26605b261ecSmrgvoid OsBlockSignals (void);
26705b261ecSmrg
26805b261ecSmrgvoid OsReleaseSignals (void);
26905b261ecSmrg
27005b261ecSmrg#if !defined(WIN32)
27105b261ecSmrgextern int System(char *);
27205b261ecSmrgextern pointer Popen(char *, char *);
27305b261ecSmrgextern int Pclose(pointer);
27405b261ecSmrgextern pointer Fopen(char *, char *);
27505b261ecSmrgextern int Fclose(pointer);
27605b261ecSmrg#else
27705b261ecSmrg#define System(a) system(a)
27805b261ecSmrg#define Popen(a,b) popen(a,b)
27905b261ecSmrg#define Pclose(a) pclose(a)
28005b261ecSmrg#define Fopen(a,b) fopen(a,b)
28105b261ecSmrg#define Fclose(a) fclose(a)
28205b261ecSmrg#endif
28305b261ecSmrg
28405b261ecSmrgextern void CheckUserParameters(int argc, char **argv, char **envp);
28505b261ecSmrgextern void CheckUserAuthorization(void);
28605b261ecSmrg
28705b261ecSmrgextern int AddHost(
28805b261ecSmrg    ClientPtr	/*client*/,
28905b261ecSmrg    int         /*family*/,
29005b261ecSmrg    unsigned    /*length*/,
29105b261ecSmrg    pointer     /*pAddr*/);
29205b261ecSmrg
29305b261ecSmrgextern Bool ForEachHostInFamily (
29405b261ecSmrg    int	    /*family*/,
29505b261ecSmrg    Bool    (* /*func*/ )(
29605b261ecSmrg            unsigned char * /* addr */,
29705b261ecSmrg            short           /* len */,
29805b261ecSmrg            pointer         /* closure */),
29905b261ecSmrg    pointer /*closure*/);
30005b261ecSmrg
30105b261ecSmrgextern int RemoveHost(
30205b261ecSmrg    ClientPtr	/*client*/,
30305b261ecSmrg    int         /*family*/,
30405b261ecSmrg    unsigned    /*length*/,
30505b261ecSmrg    pointer     /*pAddr*/);
30605b261ecSmrg
30705b261ecSmrgextern int GetHosts(
30805b261ecSmrg    pointer * /*data*/,
30905b261ecSmrg    int	    * /*pnHosts*/,
31005b261ecSmrg    int	    * /*pLen*/,
31105b261ecSmrg    BOOL    * /*pEnabled*/);
31205b261ecSmrg
31305b261ecSmrgtypedef struct sockaddr * sockaddrPtr;
31405b261ecSmrg
31505b261ecSmrgextern int InvalidHost(sockaddrPtr /*saddr*/, int /*len*/, ClientPtr client);
31605b261ecSmrg
31705b261ecSmrgextern int LocalClient(ClientPtr /* client */);
31805b261ecSmrg
31905b261ecSmrgextern int LocalClientCred(ClientPtr, int *, int *);
32005b261ecSmrg
321637ac9abSmrg#define LCC_UID_SET	(1 << 0)
322637ac9abSmrg#define LCC_GID_SET	(1 << 1)
323637ac9abSmrg#define LCC_PID_SET	(1 << 2)
324637ac9abSmrg#define LCC_ZID_SET	(1 << 3)
325637ac9abSmrg
326637ac9abSmrgtypedef struct {
327637ac9abSmrg    int fieldsSet;	/* Bit mask of fields set */
328637ac9abSmrg    int	euid;		/* Effective uid */
329637ac9abSmrg    int egid;		/* Primary effective group id */
330637ac9abSmrg    int nSuppGids;	/* Number of supplementary group ids */
331637ac9abSmrg    int *pSuppGids;	/* Array of supplementary group ids */
332637ac9abSmrg    int pid;		/* Process id */
333637ac9abSmrg    int zoneid;		/* Only set on Solaris 10 & later */
334637ac9abSmrg} LocalClientCredRec;
335637ac9abSmrg
336637ac9abSmrgextern int GetLocalClientCreds(ClientPtr, LocalClientCredRec **);
337637ac9abSmrgextern void FreeLocalClientCreds(LocalClientCredRec *);
338637ac9abSmrg
33905b261ecSmrgextern int ChangeAccessControl(ClientPtr /*client*/, int /*fEnabled*/);
34005b261ecSmrg
34105b261ecSmrgextern int GetAccessControl(void);
34205b261ecSmrg
34305b261ecSmrg
34405b261ecSmrgextern void AddLocalHosts(void);
34505b261ecSmrg
34605b261ecSmrgextern void ResetHosts(char *display);
34705b261ecSmrg
34805b261ecSmrgextern void EnableLocalHost(void);
34905b261ecSmrg
35005b261ecSmrgextern void DisableLocalHost(void);
35105b261ecSmrg
35205b261ecSmrgextern void AccessUsingXdmcp(void);
35305b261ecSmrg
35405b261ecSmrgextern void DefineSelf(int /*fd*/);
35505b261ecSmrg
35605b261ecSmrgextern void AugmentSelf(pointer /*from*/, int /*len*/);
35705b261ecSmrg
35805b261ecSmrgextern void InitAuthorization(char * /*filename*/);
35905b261ecSmrg
36005b261ecSmrg/* extern int LoadAuthorization(void); */
36105b261ecSmrg
36205b261ecSmrgextern void RegisterAuthorizations(void);
36305b261ecSmrg
36405b261ecSmrgextern int AuthorizationFromID (
36505b261ecSmrg	XID 		id,
36605b261ecSmrg	unsigned short	*name_lenp,
36705b261ecSmrg	char		**namep,
36805b261ecSmrg	unsigned short	*data_lenp,
36905b261ecSmrg	char		**datap);
37005b261ecSmrg
37105b261ecSmrgextern XID CheckAuthorization(
37205b261ecSmrg    unsigned int /*namelength*/,
37305b261ecSmrg    char * /*name*/,
37405b261ecSmrg    unsigned int /*datalength*/,
37505b261ecSmrg    char * /*data*/,
37605b261ecSmrg    ClientPtr /*client*/,
37705b261ecSmrg    char ** /*reason*/
37805b261ecSmrg);
37905b261ecSmrg
38005b261ecSmrgextern void ResetAuthorization(void);
38105b261ecSmrg
38205b261ecSmrgextern int RemoveAuthorization (
38305b261ecSmrg    unsigned short	name_length,
38405b261ecSmrg    char		*name,
38505b261ecSmrg    unsigned short	data_length,
38605b261ecSmrg    char		*data);
38705b261ecSmrg
38805b261ecSmrgextern int AddAuthorization(
38905b261ecSmrg    unsigned int	/*name_length*/,
39005b261ecSmrg    char *		/*name*/,
39105b261ecSmrg    unsigned int	/*data_length*/,
39205b261ecSmrg    char *		/*data*/);
39305b261ecSmrg
39405b261ecSmrgextern XID GenerateAuthorization(
39505b261ecSmrg    unsigned int   /* name_length */,
39605b261ecSmrg    char	*  /* name */,
39705b261ecSmrg    unsigned int   /* data_length */,
39805b261ecSmrg    char	*  /* data */,
39905b261ecSmrg    unsigned int * /* data_length_return */,
40005b261ecSmrg    char	** /* data_return */);
40105b261ecSmrg
40205b261ecSmrgextern int ddxProcessArgument(int /*argc*/, char * /*argv*/ [], int /*i*/);
40305b261ecSmrg
40405b261ecSmrgextern void ddxUseMsg(void);
40505b261ecSmrg
40605b261ecSmrg/* int ReqLen(xReq *req, ClientPtr client)
40705b261ecSmrg * Given a pointer to a *complete* request, return its length in bytes.
40805b261ecSmrg * Note that if the request is a big request (as defined in the Big
40905b261ecSmrg * Requests extension), the macro lies by returning 4 less than the
41005b261ecSmrg * length that it actually occupies in the request buffer.  This is so you
41105b261ecSmrg * can blindly compare the length with the various sz_<request> constants
41205b261ecSmrg * in Xproto.h without having to know/care about big requests.
41305b261ecSmrg */
41405b261ecSmrg#define ReqLen(_pxReq, _client) \
41505b261ecSmrg ((_pxReq->length ? \
41605b261ecSmrg     (_client->swapped ? lswaps(_pxReq->length) : _pxReq->length) \
41705b261ecSmrg  : ((_client->swapped ? \
41805b261ecSmrg	lswapl(((CARD32*)_pxReq)[1]) : ((CARD32*)_pxReq)[1])-1) \
41905b261ecSmrg  ) << 2)
42005b261ecSmrg
42105b261ecSmrg/* otherReqTypePtr CastxReq(xReq *req, otherReqTypePtr)
42205b261ecSmrg * Cast the given request to one of type otherReqTypePtr to access
42305b261ecSmrg * fields beyond the length field.
42405b261ecSmrg */
42505b261ecSmrg#define CastxReq(_pxReq, otherReqTypePtr) \
42605b261ecSmrg    (_pxReq->length ? (otherReqTypePtr)_pxReq \
42705b261ecSmrg		    : (otherReqTypePtr)(((CARD32*)_pxReq)+1))
42805b261ecSmrg
42905b261ecSmrg/* stuff for ReplyCallback */
43005b261ecSmrgextern CallbackListPtr ReplyCallback;
43105b261ecSmrgtypedef struct {
43205b261ecSmrg    ClientPtr client;
433637ac9abSmrg    const void *replyData;
43405b261ecSmrg    unsigned long dataLenBytes;
43505b261ecSmrg    unsigned long bytesRemaining;
43605b261ecSmrg    Bool startOfReply;
43705b261ecSmrg} ReplyInfoRec;
43805b261ecSmrg
43905b261ecSmrg/* stuff for FlushCallback */
44005b261ecSmrgextern CallbackListPtr FlushCallback;
44105b261ecSmrg
44205b261ecSmrgextern void AbortDDX(void);
44305b261ecSmrgextern void ddxGiveUp(void);
44405b261ecSmrgextern int TimeSinceLastInputEvent(void);
44505b261ecSmrg
446637ac9abSmrg/* strcasecmp.c */
447637ac9abSmrg#if NEED_STRCASECMP
448637ac9abSmrg#define strcasecmp xstrcasecmp
449637ac9abSmrgextern int xstrcasecmp(const char *s1, const char *s2);
450637ac9abSmrg#endif
451637ac9abSmrg
452637ac9abSmrg#if NEED_STRNCASECMP
453637ac9abSmrg#define strncasecmp xstrncasecmp
454637ac9abSmrgextern int xstrncasecmp(const char *s1, const char *s2, size_t n);
455637ac9abSmrg#endif
456637ac9abSmrg
457637ac9abSmrg#if NEED_STRCASESTR
458637ac9abSmrg#define strcasestr xstrcasestr
459637ac9abSmrgextern char *xstrcasestr(const char *s, const char *find);
460637ac9abSmrg#endif
461637ac9abSmrg
462637ac9abSmrg#ifndef HAS_STRLCPY
463637ac9abSmrgextern size_t strlcpy(char *dst, const char *src, size_t siz);
464637ac9abSmrgextern size_t strlcat(char *dst, const char *src, size_t siz);
465637ac9abSmrg#endif
466637ac9abSmrg
46705b261ecSmrg/* Logging. */
46805b261ecSmrgtypedef enum _LogParameter {
46905b261ecSmrg    XLOG_FLUSH,
47005b261ecSmrg    XLOG_SYNC,
47105b261ecSmrg    XLOG_VERBOSITY,
47205b261ecSmrg    XLOG_FILE_VERBOSITY
47305b261ecSmrg} LogParameter;
47405b261ecSmrg
47505b261ecSmrg/* Flags for log messages. */
47605b261ecSmrgtypedef enum {
47705b261ecSmrg    X_PROBED,			/* Value was probed */
47805b261ecSmrg    X_CONFIG,			/* Value was given in the config file */
47905b261ecSmrg    X_DEFAULT,			/* Value is a default */
48005b261ecSmrg    X_CMDLINE,			/* Value was given on the command line */
48105b261ecSmrg    X_NOTICE,			/* Notice */
48205b261ecSmrg    X_ERROR,			/* Error message */
48305b261ecSmrg    X_WARNING,			/* Warning message */
48405b261ecSmrg    X_INFO,			/* Informational message */
48505b261ecSmrg    X_NONE,			/* No prefix */
48605b261ecSmrg    X_NOT_IMPLEMENTED,		/* Not implemented */
48705b261ecSmrg    X_UNKNOWN = -1		/* unknown -- this must always be last */
48805b261ecSmrg} MessageType;
48905b261ecSmrg
49005b261ecSmrg/* XXX Need to check which GCC versions have the format(printf) attribute. */
491637ac9abSmrg#if defined(__GNUC__) && (__GNUC__ > 2)
49205b261ecSmrg#define _printf_attribute(a,b) __attribute((format(__printf__,a,b)))
49305b261ecSmrg#else
49405b261ecSmrg#define _printf_attribute(a,b) /**/
49505b261ecSmrg#endif
49605b261ecSmrg
49705b261ecSmrgextern const char *LogInit(const char *fname, const char *backup);
49805b261ecSmrgextern void LogClose(void);
49905b261ecSmrgextern Bool LogSetParameter(LogParameter param, int value);
50005b261ecSmrgextern void LogVWrite(int verb, const char *f, va_list args);
50105b261ecSmrgextern void LogWrite(int verb, const char *f, ...) _printf_attribute(2,3);
50205b261ecSmrgextern void LogVMessageVerb(MessageType type, int verb, const char *format,
50305b261ecSmrg			    va_list args);
50405b261ecSmrgextern void LogMessageVerb(MessageType type, int verb, const char *format,
50505b261ecSmrg			   ...) _printf_attribute(3,4);
50605b261ecSmrgextern void LogMessage(MessageType type, const char *format, ...)
50705b261ecSmrg			_printf_attribute(2,3);
50805b261ecSmrgextern void FreeAuditTimer(void);
50905b261ecSmrgextern void AuditF(const char *f, ...) _printf_attribute(1,2);
51005b261ecSmrgextern void VAuditF(const char *f, va_list args);
51105b261ecSmrgextern void FatalError(const char *f, ...) _printf_attribute(1,2)
512637ac9abSmrg#if defined(__GNUC__) && (__GNUC__ > 2)
51305b261ecSmrg__attribute((noreturn))
51405b261ecSmrg#endif
51505b261ecSmrg;
51605b261ecSmrg
51705b261ecSmrg#ifdef DEBUG
51805b261ecSmrg#define DebugF ErrorF
51905b261ecSmrg#else
520637ac9abSmrg#define DebugF(...) /* */
52105b261ecSmrg#endif
52205b261ecSmrg
52305b261ecSmrgextern void VErrorF(const char *f, va_list args);
52405b261ecSmrgextern void ErrorF(const char *f, ...) _printf_attribute(1,2);
52505b261ecSmrgextern void Error(char *str);
52605b261ecSmrgextern void LogPrintMarkers(void);
52705b261ecSmrg
528637ac9abSmrgextern void xorg_backtrace(void);
529637ac9abSmrg
53005b261ecSmrg#endif /* OS_H */
531