1706f2543Smrg/***********************************************************
2706f2543Smrg
3706f2543SmrgCopyright 1987, 1998  The Open Group
4706f2543Smrg
5706f2543SmrgPermission to use, copy, modify, distribute, and sell this software and its
6706f2543Smrgdocumentation for any purpose is hereby granted without fee, provided that
7706f2543Smrgthe above copyright notice appear in all copies and that both that
8706f2543Smrgcopyright notice and this permission notice appear in supporting
9706f2543Smrgdocumentation.
10706f2543Smrg
11706f2543SmrgThe above copyright notice and this permission notice shall be included in
12706f2543Smrgall copies or substantial portions of the Software.
13706f2543Smrg
14706f2543SmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15706f2543SmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16706f2543SmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
17706f2543SmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18706f2543SmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19706f2543SmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20706f2543Smrg
21706f2543SmrgExcept as contained in this notice, the name of The Open Group shall not be
22706f2543Smrgused in advertising or otherwise to promote the sale, use or other dealings
23706f2543Smrgin this Software without prior written authorization from The Open Group.
24706f2543Smrg
25706f2543Smrg
26706f2543SmrgCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
27706f2543Smrg
28706f2543Smrg                        All Rights Reserved
29706f2543Smrg
30706f2543SmrgPermission to use, copy, modify, and distribute this software and its
31706f2543Smrgdocumentation for any purpose and without fee is hereby granted,
32706f2543Smrgprovided that the above copyright notice appear in all copies and that
33706f2543Smrgboth that copyright notice and this permission notice appear in
34706f2543Smrgsupporting documentation, and that the name of Digital not be
35706f2543Smrgused in advertising or publicity pertaining to distribution of the
36706f2543Smrgsoftware without specific, written prior permission.
37706f2543Smrg
38706f2543SmrgDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
39706f2543SmrgALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
40706f2543SmrgDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
41706f2543SmrgANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
42706f2543SmrgWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
43706f2543SmrgARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
44706f2543SmrgSOFTWARE.
45706f2543Smrg
46706f2543Smrg******************************************************************/
47706f2543Smrg
48706f2543Smrg
49706f2543Smrg#ifndef OS_H
50706f2543Smrg#define OS_H
51706f2543Smrg
52706f2543Smrg#include "misc.h"
53706f2543Smrg#include <stdarg.h>
54706f2543Smrg#include <string.h>
55706f2543Smrg
56706f2543Smrg#define SCREEN_SAVER_ON   0
57706f2543Smrg#define SCREEN_SAVER_OFF  1
58706f2543Smrg#define SCREEN_SAVER_FORCER 2
59706f2543Smrg#define SCREEN_SAVER_CYCLE  3
60706f2543Smrg
61706f2543Smrg#ifndef MAX_REQUEST_SIZE
62706f2543Smrg#define MAX_REQUEST_SIZE 65535
63706f2543Smrg#endif
64706f2543Smrg#ifndef MAX_BIG_REQUEST_SIZE
65706f2543Smrg#define MAX_BIG_REQUEST_SIZE 4194303
66706f2543Smrg#endif
67706f2543Smrg
68706f2543Smrgtypedef struct _FontPathRec *FontPathPtr;
69706f2543Smrgtypedef struct _NewClientRec *NewClientPtr;
70706f2543Smrg
71706f2543Smrg#ifndef xalloc
72706f2543Smrg#define xnfalloc(size) XNFalloc((unsigned long)(size))
73706f2543Smrg#define xnfcalloc(_num, _size) XNFcalloc((unsigned long)(_num)*(unsigned long)(_size))
74706f2543Smrg#define xnfrealloc(ptr, size) XNFrealloc((pointer)(ptr), (unsigned long)(size))
75706f2543Smrg
76706f2543Smrg#define xalloc(size) Xalloc((unsigned long)(size))
77706f2543Smrg#define xcalloc(_num, _size) Xcalloc((unsigned long)(_num)*(unsigned long)(_size))
78706f2543Smrg#define xrealloc(ptr, size) Xrealloc((pointer)(ptr), (unsigned long)(size))
79706f2543Smrg#define xfree(ptr) Xfree((pointer)(ptr))
80706f2543Smrg#define xstrdup(s) Xstrdup(s)
81706f2543Smrg#define xnfstrdup(s) XNFstrdup(s)
82706f2543Smrg#endif
83706f2543Smrg
84706f2543Smrg#include <stdio.h>
85706f2543Smrg#include <stdarg.h>
86706f2543Smrg#include <string.h>
87706f2543Smrg#include <strings.h>
88706f2543Smrg
89706f2543Smrg
90706f2543Smrg#ifdef DDXBEFORERESET
91706f2543Smrgextern void ddxBeforeReset (void);
92706f2543Smrg#endif
93706f2543Smrg
94706f2543Smrg#ifdef DDXOSVERRORF
95706f2543Smrgextern _X_EXPORT void (*OsVendorVErrorFProc)(const char *, va_list args);
96706f2543Smrg#endif
97706f2543Smrg
98706f2543Smrgextern _X_EXPORT int WaitForSomething(
99706f2543Smrg    int* /*pClientsReady*/
100706f2543Smrg);
101706f2543Smrg
102706f2543Smrgextern _X_EXPORT int ReadRequestFromClient(ClientPtr /*client*/);
103706f2543Smrg
104706f2543Smrgextern _X_EXPORT Bool InsertFakeRequest(
105706f2543Smrg    ClientPtr /*client*/,
106706f2543Smrg    char* /*data*/,
107706f2543Smrg    int /*count*/);
108706f2543Smrg
109706f2543Smrgextern _X_EXPORT void ResetCurrentRequest(ClientPtr /*client*/);
110706f2543Smrg
111706f2543Smrgextern _X_EXPORT void FlushAllOutput(void);
112706f2543Smrg
113706f2543Smrgextern _X_EXPORT void FlushIfCriticalOutputPending(void);
114706f2543Smrg
115706f2543Smrgextern _X_EXPORT void SetCriticalOutputPending(void);
116706f2543Smrg
117706f2543Smrgextern _X_EXPORT int WriteToClient(ClientPtr /*who*/, int /*count*/, const void* /*buf*/);
118706f2543Smrg
119706f2543Smrgextern _X_EXPORT void ResetOsBuffers(void);
120706f2543Smrg
121706f2543Smrgextern _X_EXPORT void InitConnectionLimits(void);
122706f2543Smrg
123706f2543Smrgextern _X_EXPORT void NotifyParentProcess(void);
124706f2543Smrg
125706f2543Smrgextern _X_EXPORT void CreateWellKnownSockets(void);
126706f2543Smrg
127706f2543Smrgextern _X_EXPORT void ResetWellKnownSockets(void);
128706f2543Smrg
129706f2543Smrgextern _X_EXPORT void CloseWellKnownConnections(void);
130706f2543Smrg
131706f2543Smrgextern _X_EXPORT XID AuthorizationIDOfClient(ClientPtr /*client*/);
132706f2543Smrg
133706f2543Smrgextern _X_EXPORT char *ClientAuthorized(
134706f2543Smrg    ClientPtr /*client*/,
135706f2543Smrg    unsigned int /*proto_n*/,
136706f2543Smrg    char* /*auth_proto*/,
137706f2543Smrg    unsigned int /*string_n*/,
138706f2543Smrg    char* /*auth_string*/);
139706f2543Smrg
140706f2543Smrgextern _X_EXPORT Bool EstablishNewConnections(
141706f2543Smrg    ClientPtr /*clientUnused*/,
142706f2543Smrg    pointer /*closure*/);
143706f2543Smrg
144706f2543Smrgextern _X_EXPORT void CheckConnections(void);
145706f2543Smrg
146706f2543Smrgextern _X_EXPORT void CloseDownConnection(ClientPtr /*client*/);
147706f2543Smrg
148706f2543Smrgextern _X_EXPORT void AddGeneralSocket(int /*fd*/);
149706f2543Smrg
150706f2543Smrgextern _X_EXPORT void RemoveGeneralSocket(int /*fd*/);
151706f2543Smrg
152706f2543Smrgextern _X_EXPORT void AddEnabledDevice(int /*fd*/);
153706f2543Smrg
154706f2543Smrgextern _X_EXPORT void RemoveEnabledDevice(int /*fd*/);
155706f2543Smrg
156706f2543Smrgextern _X_EXPORT int OnlyListenToOneClient(ClientPtr /*client*/);
157706f2543Smrg
158706f2543Smrgextern _X_EXPORT void ListenToAllClients(void);
159706f2543Smrg
160706f2543Smrgextern _X_EXPORT void IgnoreClient(ClientPtr /*client*/);
161706f2543Smrg
162706f2543Smrgextern _X_EXPORT void AttendClient(ClientPtr /*client*/);
163706f2543Smrg
164706f2543Smrgextern _X_EXPORT void MakeClientGrabImpervious(ClientPtr /*client*/);
165706f2543Smrg
166706f2543Smrgextern _X_EXPORT void MakeClientGrabPervious(ClientPtr /*client*/);
167706f2543Smrg
168706f2543Smrg#ifdef XQUARTZ
169706f2543Smrgextern void ListenOnOpenFD(int /* fd */, int /* noxauth */);
170706f2543Smrg#endif
171706f2543Smrg
172706f2543Smrgextern _X_EXPORT CARD32 GetTimeInMillis(void);
173706f2543Smrg
174706f2543Smrgextern _X_EXPORT void AdjustWaitForDelay(
175706f2543Smrg    pointer /*waitTime*/,
176706f2543Smrg    unsigned long /*newdelay*/);
177706f2543Smrg
178706f2543Smrgtypedef	struct _OsTimerRec *OsTimerPtr;
179706f2543Smrg
180706f2543Smrgtypedef CARD32 (*OsTimerCallback)(
181706f2543Smrg    OsTimerPtr /* timer */,
182706f2543Smrg    CARD32 /* time */,
183706f2543Smrg    pointer /* arg */);
184706f2543Smrg
185706f2543Smrgextern _X_EXPORT void TimerInit(void);
186706f2543Smrg
187706f2543Smrgextern _X_EXPORT Bool TimerForce(OsTimerPtr /* timer */);
188706f2543Smrg
189706f2543Smrg#define TimerAbsolute (1<<0)
190706f2543Smrg#define TimerForceOld (1<<1)
191706f2543Smrg
192706f2543Smrgextern _X_EXPORT OsTimerPtr TimerSet(
193706f2543Smrg    OsTimerPtr /* timer */,
194706f2543Smrg    int /* flags */,
195706f2543Smrg    CARD32 /* millis */,
196706f2543Smrg    OsTimerCallback /* func */,
197706f2543Smrg    pointer /* arg */);
198706f2543Smrg
199706f2543Smrgextern _X_EXPORT void TimerCheck(void);
200706f2543Smrgextern _X_EXPORT void TimerCancel(OsTimerPtr /* pTimer */);
201706f2543Smrgextern _X_EXPORT void TimerFree(OsTimerPtr /* pTimer */);
202706f2543Smrg
203706f2543Smrgextern _X_EXPORT void SetScreenSaverTimer(void);
204706f2543Smrgextern _X_EXPORT void FreeScreenSaverTimer(void);
205706f2543Smrg
206706f2543Smrgextern _X_EXPORT void AutoResetServer(int /*sig*/);
207706f2543Smrg
208706f2543Smrgextern _X_EXPORT void GiveUp(int /*sig*/);
209706f2543Smrg
210706f2543Smrgextern _X_EXPORT void UseMsg(void);
211706f2543Smrg
212706f2543Smrgextern _X_EXPORT void ProcessCommandLine(int /*argc*/, char* /*argv*/[]);
213706f2543Smrg
214706f2543Smrgextern _X_EXPORT int set_font_authorizations(
215706f2543Smrg    char ** /* authorizations */,
216706f2543Smrg    int * /*authlen */,
217706f2543Smrg    pointer /* client */);
218706f2543Smrg
219706f2543Smrg#ifndef _HAVE_XALLOC_DECLS
220706f2543Smrg#define _HAVE_XALLOC_DECLS
221706f2543Smrg
222706f2543Smrg/*
223706f2543Smrg * These causes all sorts of warnings->errors in the xsrc build.
224706f2543Smrg */
225706f2543Smrg#ifdef __NetBSD__
226706f2543Smrg#undef _X_DEPRECATED
227706f2543Smrg#define _X_DEPRECATED
228706f2543Smrg#endif
229706f2543Smrg
230706f2543Smrg/*
231706f2543Smrg * Use malloc(3) instead.
232706f2543Smrg */
233706f2543Smrgextern _X_EXPORT void *Xalloc(unsigned long /*amount*/) _X_DEPRECATED;
234706f2543Smrg/*
235706f2543Smrg * Use calloc(3) instead
236706f2543Smrg */
237706f2543Smrgextern _X_EXPORT void *Xcalloc(unsigned long /*amount*/) _X_DEPRECATED;
238706f2543Smrg/*
239706f2543Smrg * Use realloc(3) instead
240706f2543Smrg */
241706f2543Smrgextern _X_EXPORT void *Xrealloc(void * /*ptr*/, unsigned long /*amount*/)
242706f2543Smrg    _X_DEPRECATED;
243706f2543Smrg/*
244706f2543Smrg * Use free(3) instead
245706f2543Smrg */
246706f2543Smrgextern _X_EXPORT void Xfree(void * /*ptr*/) _X_DEPRECATED;
247706f2543Smrg
248706f2543Smrg#endif
249706f2543Smrg
250706f2543Smrg/*
251706f2543Smrg * This function malloc(3)s buffer, terminating the server if there is not
252706f2543Smrg * enough memory.
253706f2543Smrg */
254706f2543Smrgextern _X_EXPORT void *XNFalloc(unsigned long /*amount*/);
255706f2543Smrg/*
256706f2543Smrg * This function calloc(3)s buffer, terminating the server if there is not
257706f2543Smrg * enough memory.
258706f2543Smrg */
259706f2543Smrgextern _X_EXPORT void *XNFcalloc(unsigned long /*amount*/);
260706f2543Smrg/*
261706f2543Smrg * This function realloc(3)s passed buffer, terminating the server if there is
262706f2543Smrg * not enough memory.
263706f2543Smrg */
264706f2543Smrgextern _X_EXPORT void *XNFrealloc(void * /*ptr*/, unsigned long /*amount*/);
265706f2543Smrg
266706f2543Smrg/*
267706f2543Smrg * This function strdup(3)s passed string. The only difference from the library
268706f2543Smrg * function that it is safe to pass NULL, as NULL will be returned.
269706f2543Smrg */
270706f2543Smrgextern _X_EXPORT char *Xstrdup(const char *s);
271706f2543Smrg
272706f2543Smrg/*
273706f2543Smrg * This function strdup(3)s passed string, terminating the server if there is
274706f2543Smrg * not enough memory. If NULL is passed to this function, NULL is returned.
275706f2543Smrg */
276706f2543Smrgextern _X_EXPORT char *XNFstrdup(const char *s);
277706f2543Smrg
278706f2543Smrg/* Include new X*asprintf API */
279706f2543Smrg#include "Xprintf.h"
280706f2543Smrg
281706f2543Smrg/* Older api deprecated in favor of the asprintf versions */
282706f2543Smrgextern _X_EXPORT char *Xprintf(const char *fmt, ...) _X_ATTRIBUTE_PRINTF(1,2) _X_DEPRECATED;
283706f2543Smrgextern _X_EXPORT char *Xvprintf(const char *fmt, va_list va)_X_ATTRIBUTE_PRINTF(1,0) _X_DEPRECATED;
284706f2543Smrgextern _X_EXPORT char *XNFprintf(const char *fmt, ...) _X_ATTRIBUTE_PRINTF(1,2) _X_DEPRECATED;
285706f2543Smrgextern _X_EXPORT char *XNFvprintf(const char *fmt, va_list va)_X_ATTRIBUTE_PRINTF(1,0) _X_DEPRECATED;
286706f2543Smrg
287706f2543Smrgtypedef void (*OsSigHandlerPtr)(int /* sig */);
288706f2543Smrgtypedef int (*OsSigWrapperPtr)(int /* sig */);
289706f2543Smrg
290706f2543Smrgextern _X_EXPORT OsSigHandlerPtr OsSignal(int /* sig */, OsSigHandlerPtr /* handler */);
291706f2543Smrgextern _X_EXPORT OsSigWrapperPtr OsRegisterSigWrapper(OsSigWrapperPtr newWrap);
292706f2543Smrg
293706f2543Smrgextern _X_EXPORT int auditTrailLevel;
294706f2543Smrg
295706f2543Smrgextern _X_EXPORT void LockServer(void);
296706f2543Smrgextern _X_EXPORT void UnlockServer(void);
297706f2543Smrg
298706f2543Smrgextern _X_EXPORT int OsLookupColor(
299706f2543Smrg    int	/*screen*/,
300706f2543Smrg    char * /*name*/,
301706f2543Smrg    unsigned /*len*/,
302706f2543Smrg    unsigned short * /*pred*/,
303706f2543Smrg    unsigned short * /*pgreen*/,
304706f2543Smrg    unsigned short * /*pblue*/);
305706f2543Smrg
306706f2543Smrgextern _X_EXPORT void OsInit(void);
307706f2543Smrg
308706f2543Smrgextern _X_EXPORT void OsCleanup(Bool);
309706f2543Smrg
310706f2543Smrgextern _X_EXPORT void OsVendorFatalError(void);
311706f2543Smrg
312706f2543Smrgextern _X_EXPORT void OsVendorInit(void);
313706f2543Smrg
314706f2543Smrgextern _X_EXPORT void OsBlockSignals (void);
315706f2543Smrg
316706f2543Smrgextern _X_EXPORT void OsReleaseSignals (void);
317706f2543Smrg
318706f2543Smrgextern _X_EXPORT void OsAbort (void) _X_NORETURN;
319706f2543Smrg
320706f2543Smrg#if !defined(WIN32)
321706f2543Smrgextern _X_EXPORT int System(char *);
322706f2543Smrgextern _X_EXPORT pointer Popen(char *, char *);
323706f2543Smrgextern _X_EXPORT int Pclose(pointer);
324706f2543Smrgextern _X_EXPORT pointer Fopen(char *, char *);
325706f2543Smrgextern _X_EXPORT int Fclose(pointer);
326706f2543Smrg#else
327706f2543Smrg#define System(a) system(a)
328706f2543Smrg#define Popen(a,b) popen(a,b)
329706f2543Smrg#define Pclose(a) pclose(a)
330706f2543Smrg#define Fopen(a,b) fopen(a,b)
331706f2543Smrg#define Fclose(a) fclose(a)
332706f2543Smrg#endif
333706f2543Smrg
334706f2543Smrgextern _X_EXPORT void CheckUserParameters(int argc, char **argv, char **envp);
335706f2543Smrgextern _X_EXPORT void CheckUserAuthorization(void);
336706f2543Smrg
337706f2543Smrgextern _X_EXPORT int AddHost(
338706f2543Smrg    ClientPtr	/*client*/,
339706f2543Smrg    int         /*family*/,
340706f2543Smrg    unsigned    /*length*/,
341706f2543Smrg    const void */*pAddr*/);
342706f2543Smrg
343706f2543Smrgextern _X_EXPORT Bool ForEachHostInFamily (
344706f2543Smrg    int	    /*family*/,
345706f2543Smrg    Bool    (* /*func*/ )(
346706f2543Smrg            unsigned char * /* addr */,
347706f2543Smrg            short           /* len */,
348706f2543Smrg            pointer         /* closure */),
349706f2543Smrg    pointer /*closure*/);
350706f2543Smrg
351706f2543Smrgextern _X_EXPORT int RemoveHost(
352706f2543Smrg    ClientPtr	/*client*/,
353706f2543Smrg    int         /*family*/,
354706f2543Smrg    unsigned    /*length*/,
355706f2543Smrg    pointer     /*pAddr*/);
356706f2543Smrg
357706f2543Smrgextern _X_EXPORT int GetHosts(
358706f2543Smrg    pointer * /*data*/,
359706f2543Smrg    int	    * /*pnHosts*/,
360706f2543Smrg    int	    * /*pLen*/,
361706f2543Smrg    BOOL    * /*pEnabled*/);
362706f2543Smrg
363706f2543Smrgtypedef struct sockaddr * sockaddrPtr;
364706f2543Smrg
365706f2543Smrgextern _X_EXPORT int InvalidHost(sockaddrPtr /*saddr*/, int /*len*/, ClientPtr client);
366706f2543Smrg
367706f2543Smrgextern _X_EXPORT int LocalClient(ClientPtr /* client */);
368706f2543Smrg
369706f2543Smrgextern _X_EXPORT int LocalClientCred(ClientPtr, int *, int *);
370706f2543Smrg
371706f2543Smrg#define LCC_UID_SET	(1 << 0)
372706f2543Smrg#define LCC_GID_SET	(1 << 1)
373706f2543Smrg#define LCC_PID_SET	(1 << 2)
374706f2543Smrg#define LCC_ZID_SET	(1 << 3)
375706f2543Smrg
376706f2543Smrgtypedef struct {
377706f2543Smrg    int fieldsSet;	/* Bit mask of fields set */
378706f2543Smrg    int	euid;		/* Effective uid */
379706f2543Smrg    int egid;		/* Primary effective group id */
380706f2543Smrg    int nSuppGids;	/* Number of supplementary group ids */
381706f2543Smrg    int *pSuppGids;	/* Array of supplementary group ids */
382706f2543Smrg    int pid;		/* Process id */
383706f2543Smrg    int zoneid;		/* Only set on Solaris 10 & later */
384706f2543Smrg} LocalClientCredRec;
385706f2543Smrg
386706f2543Smrgextern _X_EXPORT int GetLocalClientCreds(ClientPtr, LocalClientCredRec **);
387706f2543Smrgextern _X_EXPORT void FreeLocalClientCreds(LocalClientCredRec *);
388706f2543Smrg
389706f2543Smrgextern _X_EXPORT int ChangeAccessControl(ClientPtr /*client*/, int /*fEnabled*/);
390706f2543Smrg
391706f2543Smrgextern _X_EXPORT int GetAccessControl(void);
392706f2543Smrg
393706f2543Smrg
394706f2543Smrgextern _X_EXPORT void AddLocalHosts(void);
395706f2543Smrg
396706f2543Smrgextern _X_EXPORT void ResetHosts(char *display);
397706f2543Smrg
398706f2543Smrgextern _X_EXPORT void EnableLocalHost(void);
399706f2543Smrg
400706f2543Smrgextern _X_EXPORT void DisableLocalHost(void);
401706f2543Smrg
402706f2543Smrgextern _X_EXPORT void AccessUsingXdmcp(void);
403706f2543Smrg
404706f2543Smrgextern _X_EXPORT void DefineSelf(int /*fd*/);
405706f2543Smrg
406706f2543Smrg#if XDMCP
407706f2543Smrgextern _X_EXPORT void AugmentSelf(pointer /*from*/, int /*len*/);
408706f2543Smrg
409706f2543Smrgextern _X_EXPORT void RegisterAuthorizations(void);
410706f2543Smrg#endif
411706f2543Smrg
412706f2543Smrgextern _X_EXPORT void InitAuthorization(char * /*filename*/);
413706f2543Smrg
414706f2543Smrg/* extern int LoadAuthorization(void); */
415706f2543Smrg
416706f2543Smrgextern _X_EXPORT int AuthorizationFromID (
417706f2543Smrg	XID 		id,
418706f2543Smrg	unsigned short	*name_lenp,
419706f2543Smrg	char		**namep,
420706f2543Smrg	unsigned short	*data_lenp,
421706f2543Smrg	char		**datap);
422706f2543Smrg
423706f2543Smrgextern _X_EXPORT XID CheckAuthorization(
424706f2543Smrg    unsigned int /*namelength*/,
425706f2543Smrg    const char * /*name*/,
426706f2543Smrg    unsigned int /*datalength*/,
427706f2543Smrg    const char * /*data*/,
428706f2543Smrg    ClientPtr /*client*/,
429706f2543Smrg    char ** /*reason*/
430706f2543Smrg);
431706f2543Smrg
432706f2543Smrgextern _X_EXPORT void ResetAuthorization(void);
433706f2543Smrg
434706f2543Smrgextern _X_EXPORT int RemoveAuthorization (
435706f2543Smrg    unsigned short	name_length,
436706f2543Smrg    const char		*name,
437706f2543Smrg    unsigned short	data_length,
438706f2543Smrg    const char		*data);
439706f2543Smrg
440706f2543Smrgextern _X_EXPORT int AddAuthorization(
441706f2543Smrg    unsigned int	/*name_length*/,
442706f2543Smrg    const char *	/*name*/,
443706f2543Smrg    unsigned int	/*data_length*/,
444706f2543Smrg    char *		/*data*/);
445706f2543Smrg
446706f2543Smrg#ifdef XCSECURITY
447706f2543Smrgextern _X_EXPORT XID GenerateAuthorization(
448706f2543Smrg    unsigned int   /* name_length */,
449706f2543Smrg    const char	*  /* name */,
450706f2543Smrg    unsigned int   /* data_length */,
451706f2543Smrg    const char	*  /* data */,
452706f2543Smrg    unsigned int * /* data_length_return */,
453706f2543Smrg    char	** /* data_return */);
454706f2543Smrg#endif
455706f2543Smrg
456706f2543Smrgextern _X_EXPORT int ddxProcessArgument(int /*argc*/, char * /*argv*/ [], int /*i*/);
457706f2543Smrg
458706f2543Smrgextern _X_EXPORT void ddxUseMsg(void);
459706f2543Smrg
460706f2543Smrg/* stuff for ReplyCallback */
461706f2543Smrgextern _X_EXPORT CallbackListPtr ReplyCallback;
462706f2543Smrgtypedef struct {
463706f2543Smrg    ClientPtr client;
464706f2543Smrg    const void *replyData;
465706f2543Smrg    unsigned long dataLenBytes;
466706f2543Smrg    unsigned long bytesRemaining;
467706f2543Smrg    Bool startOfReply;
468706f2543Smrg} ReplyInfoRec;
469706f2543Smrg
470706f2543Smrg/* stuff for FlushCallback */
471706f2543Smrgextern _X_EXPORT CallbackListPtr FlushCallback;
472706f2543Smrg
473706f2543Smrgextern _X_EXPORT void AbortDDX(void);
474706f2543Smrgextern _X_EXPORT void ddxGiveUp(void);
475706f2543Smrgextern _X_EXPORT int TimeSinceLastInputEvent(void);
476706f2543Smrg
477706f2543Smrg/* strcasecmp.c */
478706f2543Smrg#if NEED_STRCASECMP
479706f2543Smrg#define strcasecmp xstrcasecmp
480706f2543Smrgextern _X_EXPORT int xstrcasecmp(const char *s1, const char *s2);
481706f2543Smrg#endif
482706f2543Smrg
483706f2543Smrg#if NEED_STRNCASECMP
484706f2543Smrg#define strncasecmp xstrncasecmp
485706f2543Smrgextern _X_EXPORT int xstrncasecmp(const char *s1, const char *s2, size_t n);
486706f2543Smrg#endif
487706f2543Smrg
488706f2543Smrg#if NEED_STRCASESTR
489706f2543Smrg#define strcasestr xstrcasestr
490706f2543Smrgextern _X_EXPORT char *xstrcasestr(const char *s, const char *find);
491706f2543Smrg#endif
492706f2543Smrg
493706f2543Smrg#ifndef HAS_STRLCPY
494706f2543Smrgextern _X_EXPORT size_t strlcpy(char *dst, const char *src, size_t siz);
495706f2543Smrgextern _X_EXPORT size_t strlcat(char *dst, const char *src, size_t siz);
496706f2543Smrg#endif
497706f2543Smrg
498030cabe0Smrg#ifndef HAVE_TIMINGSAFE_MEMCMP
499030cabe0Smrgextern _X_EXPORT int
500030cabe0Smrgtimingsafe_memcmp(const void *b1, const void *b2, size_t len);
501030cabe0Smrg#endif
502030cabe0Smrg
503706f2543Smrg/* Logging. */
504706f2543Smrgtypedef enum _LogParameter {
505706f2543Smrg    XLOG_FLUSH,
506706f2543Smrg    XLOG_SYNC,
507706f2543Smrg    XLOG_VERBOSITY,
508706f2543Smrg    XLOG_FILE_VERBOSITY
509706f2543Smrg} LogParameter;
510706f2543Smrg
511706f2543Smrg/* Flags for log messages. */
512706f2543Smrgtypedef enum {
513706f2543Smrg    X_PROBED,			/* Value was probed */
514706f2543Smrg    X_CONFIG,			/* Value was given in the config file */
515706f2543Smrg    X_DEFAULT,			/* Value is a default */
516706f2543Smrg    X_CMDLINE,			/* Value was given on the command line */
517706f2543Smrg    X_NOTICE,			/* Notice */
518706f2543Smrg    X_ERROR,			/* Error message */
519706f2543Smrg    X_WARNING,			/* Warning message */
520706f2543Smrg    X_INFO,			/* Informational message */
521706f2543Smrg    X_NONE,			/* No prefix */
522706f2543Smrg    X_NOT_IMPLEMENTED,		/* Not implemented */
523706f2543Smrg    X_UNKNOWN = -1		/* unknown -- this must always be last */
524706f2543Smrg} MessageType;
525706f2543Smrg
526706f2543Smrgextern _X_EXPORT const char *LogInit(const char *fname, const char *backup);
527706f2543Smrgextern _X_EXPORT void LogClose(void);
528706f2543Smrgextern _X_EXPORT Bool LogSetParameter(LogParameter param, int value);
529706f2543Smrgextern _X_EXPORT void LogVWrite(int verb, const char *f, va_list args);
530706f2543Smrgextern _X_EXPORT void LogWrite(int verb, const char *f, ...) _X_ATTRIBUTE_PRINTF(2,3);
531706f2543Smrgextern _X_EXPORT void LogVMessageVerb(MessageType type, int verb, const char *format,
532706f2543Smrg			    va_list args);
533706f2543Smrgextern _X_EXPORT void LogMessageVerb(MessageType type, int verb, const char *format,
534706f2543Smrg			   ...) _X_ATTRIBUTE_PRINTF(3,4);
535706f2543Smrgextern _X_EXPORT void LogMessage(MessageType type, const char *format, ...)
536706f2543Smrg			_X_ATTRIBUTE_PRINTF(2,3);
537706f2543Smrgextern _X_EXPORT void FreeAuditTimer(void);
538706f2543Smrgextern _X_EXPORT void AuditF(const char *f, ...) _X_ATTRIBUTE_PRINTF(1,2);
539706f2543Smrgextern _X_EXPORT void VAuditF(const char *f, va_list args);
540706f2543Smrgextern _X_EXPORT void FatalError(const char *f, ...) _X_ATTRIBUTE_PRINTF(1,2) _X_NORETURN;
541706f2543Smrg
542706f2543Smrg#ifdef DEBUG
543706f2543Smrg#define DebugF ErrorF
544706f2543Smrg#else
545706f2543Smrg#define DebugF(...) /* */
546706f2543Smrg#endif
547706f2543Smrg
548706f2543Smrgextern _X_EXPORT void VErrorF(const char *f, va_list args);
549706f2543Smrgextern _X_EXPORT void ErrorF(const char *f, ...) _X_ATTRIBUTE_PRINTF(1,2);
550706f2543Smrgextern _X_EXPORT void Error(const char *str);
551706f2543Smrgextern _X_EXPORT void LogPrintMarkers(void);
552706f2543Smrg
553706f2543Smrgextern _X_EXPORT void xorg_backtrace(void);
554706f2543Smrg
555706f2543Smrg#endif /* OS_H */
556