os.h revision de0a7c19
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#define ALLOCATE_LOCAL_FALLBACK(_size) Xalloc((unsigned long)(_size)) 5405b261ecSmrg#define DEALLOCATE_LOCAL_FALLBACK(_ptr) Xfree((pointer)(_ptr)) 5505b261ecSmrg#include <X11/Xalloca.h> 5605b261ecSmrg#include <stdarg.h> 5705b261ecSmrg 5805b261ecSmrg#define NullFID ((FID) 0) 5905b261ecSmrg 6005b261ecSmrg#define SCREEN_SAVER_ON 0 6105b261ecSmrg#define SCREEN_SAVER_OFF 1 6205b261ecSmrg#define SCREEN_SAVER_FORCER 2 6305b261ecSmrg#define SCREEN_SAVER_CYCLE 3 6405b261ecSmrg 6505b261ecSmrg#ifndef MAX_REQUEST_SIZE 6605b261ecSmrg#define MAX_REQUEST_SIZE 65535 6705b261ecSmrg#endif 6805b261ecSmrg#ifndef MAX_BIG_REQUEST_SIZE 6905b261ecSmrg#define MAX_BIG_REQUEST_SIZE 4194303 7005b261ecSmrg#endif 7105b261ecSmrg 7205b261ecSmrgtypedef pointer FID; 7305b261ecSmrgtypedef struct _FontPathRec *FontPathPtr; 7405b261ecSmrgtypedef struct _NewClientRec *NewClientPtr; 7505b261ecSmrg 7605b261ecSmrg#ifndef xalloc 7705b261ecSmrg#define xnfalloc(size) XNFalloc((unsigned long)(size)) 7805b261ecSmrg#define xnfcalloc(_num, _size) XNFcalloc((unsigned long)(_num)*(unsigned long)(_size)) 7905b261ecSmrg#define xnfrealloc(ptr, size) XNFrealloc((pointer)(ptr), (unsigned long)(size)) 8005b261ecSmrg 8105b261ecSmrg#define xalloc(size) Xalloc((unsigned long)(size)) 8205b261ecSmrg#define xcalloc(_num, _size) Xcalloc((unsigned long)(_num)*(unsigned long)(_size)) 8305b261ecSmrg#define xrealloc(ptr, size) Xrealloc((pointer)(ptr), (unsigned long)(size)) 8405b261ecSmrg#define xfree(ptr) Xfree((pointer)(ptr)) 8505b261ecSmrg#define xstrdup(s) Xstrdup(s) 8605b261ecSmrg#define xnfstrdup(s) XNFstrdup(s) 8705b261ecSmrg#endif 8805b261ecSmrg 8905b261ecSmrg#include <stdio.h> 9005b261ecSmrg#include <stdarg.h> 91de0a7c19Smacallan#include <string.h> 92de0a7c19Smacallan#include <strings.h> 93de0a7c19Smacallan 9405b261ecSmrg 9505b261ecSmrg/* have to put $(SIGNAL_DEFINES) in DEFINES in Imakefile to get this right */ 9605b261ecSmrg#ifdef SIGNALRETURNSINT 9705b261ecSmrg#define SIGVAL int 9805b261ecSmrg#else 9905b261ecSmrg#define SIGVAL void 10005b261ecSmrg#endif 10105b261ecSmrg 10205b261ecSmrgextern Bool OsDelayInitColors; 10305b261ecSmrgextern void (*OsVendorVErrorFProc)(const char *, va_list args); 10405b261ecSmrg 10505b261ecSmrgextern int WaitForSomething( 10605b261ecSmrg int* /*pClientsReady*/ 10705b261ecSmrg); 10805b261ecSmrg 10905b261ecSmrgextern int ReadRequestFromClient(ClientPtr /*client*/); 11005b261ecSmrg 11105b261ecSmrgextern Bool InsertFakeRequest( 11205b261ecSmrg ClientPtr /*client*/, 11305b261ecSmrg char* /*data*/, 11405b261ecSmrg int /*count*/); 11505b261ecSmrg 11605b261ecSmrgextern void ResetCurrentRequest(ClientPtr /*client*/); 11705b261ecSmrg 11805b261ecSmrgextern void FlushAllOutput(void); 11905b261ecSmrg 12005b261ecSmrgextern void FlushIfCriticalOutputPending(void); 12105b261ecSmrg 12205b261ecSmrgextern void SetCriticalOutputPending(void); 12305b261ecSmrg 12405b261ecSmrgextern int WriteToClient(ClientPtr /*who*/, int /*count*/, char* /*buf*/); 12505b261ecSmrg 12605b261ecSmrgextern void ResetOsBuffers(void); 12705b261ecSmrg 12805b261ecSmrgextern void InitConnectionLimits(void); 12905b261ecSmrg 13005b261ecSmrgextern void CreateWellKnownSockets(void); 13105b261ecSmrg 13205b261ecSmrgextern void ResetWellKnownSockets(void); 13305b261ecSmrg 13405b261ecSmrgextern void CloseWellKnownConnections(void); 13505b261ecSmrg 13605b261ecSmrgextern XID AuthorizationIDOfClient(ClientPtr /*client*/); 13705b261ecSmrg 13805b261ecSmrgextern char *ClientAuthorized( 13905b261ecSmrg ClientPtr /*client*/, 14005b261ecSmrg unsigned int /*proto_n*/, 14105b261ecSmrg char* /*auth_proto*/, 14205b261ecSmrg unsigned int /*string_n*/, 14305b261ecSmrg char* /*auth_string*/); 14405b261ecSmrg 14505b261ecSmrgextern Bool EstablishNewConnections( 14605b261ecSmrg ClientPtr /*clientUnused*/, 14705b261ecSmrg pointer /*closure*/); 14805b261ecSmrg 14905b261ecSmrgextern void CheckConnections(void); 15005b261ecSmrg 15105b261ecSmrgextern void CloseDownConnection(ClientPtr /*client*/); 15205b261ecSmrg 15305b261ecSmrgextern void AddGeneralSocket(int /*fd*/); 15405b261ecSmrg 15505b261ecSmrgextern void RemoveGeneralSocket(int /*fd*/); 15605b261ecSmrg 15705b261ecSmrgextern void AddEnabledDevice(int /*fd*/); 15805b261ecSmrg 15905b261ecSmrgextern void RemoveEnabledDevice(int /*fd*/); 16005b261ecSmrg 16105b261ecSmrgextern void OnlyListenToOneClient(ClientPtr /*client*/); 16205b261ecSmrg 16305b261ecSmrgextern void ListenToAllClients(void); 16405b261ecSmrg 16505b261ecSmrgextern void IgnoreClient(ClientPtr /*client*/); 16605b261ecSmrg 16705b261ecSmrgextern void AttendClient(ClientPtr /*client*/); 16805b261ecSmrg 16905b261ecSmrgextern void MakeClientGrabImpervious(ClientPtr /*client*/); 17005b261ecSmrg 17105b261ecSmrgextern void MakeClientGrabPervious(ClientPtr /*client*/); 17205b261ecSmrg 17305b261ecSmrgextern void AvailableClientInput(ClientPtr /* client */); 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 InitGlobals(void); 21605b261ecSmrg 21705b261ecSmrgextern void ProcessCommandLine(int /*argc*/, char* /*argv*/[]); 21805b261ecSmrg 21905b261ecSmrgextern int set_font_authorizations( 22005b261ecSmrg char ** /* authorizations */, 22105b261ecSmrg int * /*authlen */, 22205b261ecSmrg pointer /* client */); 22305b261ecSmrg 22405b261ecSmrg#ifndef _HAVE_XALLOC_DECLS 22505b261ecSmrg#define _HAVE_XALLOC_DECLS 22605b261ecSmrgextern pointer Xalloc(unsigned long /*amount*/); 22705b261ecSmrgextern pointer Xcalloc(unsigned long /*amount*/); 22805b261ecSmrgextern pointer Xrealloc(pointer /*ptr*/, unsigned long /*amount*/); 22905b261ecSmrgextern void Xfree(pointer /*ptr*/); 23005b261ecSmrg#endif 23105b261ecSmrg 23205b261ecSmrgextern pointer XNFalloc(unsigned long /*amount*/); 23305b261ecSmrgextern pointer XNFcalloc(unsigned long /*amount*/); 23405b261ecSmrgextern pointer XNFrealloc(pointer /*ptr*/, unsigned long /*amount*/); 23505b261ecSmrg 23605b261ecSmrgextern void OsInitAllocator(void); 23705b261ecSmrg 23805b261ecSmrgextern char *Xstrdup(const char *s); 23905b261ecSmrgextern char *XNFstrdup(const char *s); 24005b261ecSmrgextern char *Xprintf(const char *fmt, ...); 24105b261ecSmrgextern char *Xvprintf(const char *fmt, va_list va); 24205b261ecSmrgextern char *XNFprintf(const char *fmt, ...); 24305b261ecSmrgextern char *XNFvprintf(const char *fmt, va_list va); 24405b261ecSmrg 24505b261ecSmrgtypedef SIGVAL (*OsSigHandlerPtr)(int /* sig */); 24605b261ecSmrg 24705b261ecSmrgextern OsSigHandlerPtr OsSignal(int /* sig */, OsSigHandlerPtr /* handler */); 24805b261ecSmrg 24905b261ecSmrgextern int auditTrailLevel; 25005b261ecSmrg 25105b261ecSmrg#ifdef SERVER_LOCK 25205b261ecSmrgextern void LockServer(void); 25305b261ecSmrgextern void UnlockServer(void); 25405b261ecSmrg#endif 25505b261ecSmrg 25605b261ecSmrgextern int OsLookupColor( 25705b261ecSmrg int /*screen*/, 25805b261ecSmrg char * /*name*/, 25905b261ecSmrg unsigned /*len*/, 26005b261ecSmrg unsigned short * /*pred*/, 26105b261ecSmrg unsigned short * /*pgreen*/, 26205b261ecSmrg unsigned short * /*pblue*/); 26305b261ecSmrg 26405b261ecSmrgextern void OsInit(void); 26505b261ecSmrg 26605b261ecSmrgextern void OsCleanup(Bool); 26705b261ecSmrg 26805b261ecSmrgextern void OsVendorFatalError(void); 26905b261ecSmrg 27005b261ecSmrgextern void OsVendorInit(void); 27105b261ecSmrg 27205b261ecSmrgextern int OsInitColors(void); 27305b261ecSmrg 27405b261ecSmrgvoid OsBlockSignals (void); 27505b261ecSmrg 27605b261ecSmrgvoid OsReleaseSignals (void); 27705b261ecSmrg 27805b261ecSmrg#if !defined(WIN32) 27905b261ecSmrgextern int System(char *); 28005b261ecSmrgextern pointer Popen(char *, char *); 28105b261ecSmrgextern int Pclose(pointer); 28205b261ecSmrgextern pointer Fopen(char *, char *); 28305b261ecSmrgextern int Fclose(pointer); 28405b261ecSmrg#else 28505b261ecSmrg#define System(a) system(a) 28605b261ecSmrg#define Popen(a,b) popen(a,b) 28705b261ecSmrg#define Pclose(a) pclose(a) 28805b261ecSmrg#define Fopen(a,b) fopen(a,b) 28905b261ecSmrg#define Fclose(a) fclose(a) 29005b261ecSmrg#endif 29105b261ecSmrg 29205b261ecSmrgextern void CheckUserParameters(int argc, char **argv, char **envp); 29305b261ecSmrgextern void CheckUserAuthorization(void); 29405b261ecSmrg 29505b261ecSmrgextern int AddHost( 29605b261ecSmrg ClientPtr /*client*/, 29705b261ecSmrg int /*family*/, 29805b261ecSmrg unsigned /*length*/, 29905b261ecSmrg pointer /*pAddr*/); 30005b261ecSmrg 30105b261ecSmrgextern Bool ForEachHostInFamily ( 30205b261ecSmrg int /*family*/, 30305b261ecSmrg Bool (* /*func*/ )( 30405b261ecSmrg unsigned char * /* addr */, 30505b261ecSmrg short /* len */, 30605b261ecSmrg pointer /* closure */), 30705b261ecSmrg pointer /*closure*/); 30805b261ecSmrg 30905b261ecSmrgextern int RemoveHost( 31005b261ecSmrg ClientPtr /*client*/, 31105b261ecSmrg int /*family*/, 31205b261ecSmrg unsigned /*length*/, 31305b261ecSmrg pointer /*pAddr*/); 31405b261ecSmrg 31505b261ecSmrgextern int GetHosts( 31605b261ecSmrg pointer * /*data*/, 31705b261ecSmrg int * /*pnHosts*/, 31805b261ecSmrg int * /*pLen*/, 31905b261ecSmrg BOOL * /*pEnabled*/); 32005b261ecSmrg 32105b261ecSmrgtypedef struct sockaddr * sockaddrPtr; 32205b261ecSmrg 32305b261ecSmrgextern int InvalidHost(sockaddrPtr /*saddr*/, int /*len*/, ClientPtr client); 32405b261ecSmrg 32505b261ecSmrgextern int LocalClient(ClientPtr /* client */); 32605b261ecSmrg 32705b261ecSmrgextern int LocalClientCred(ClientPtr, int *, int *); 32805b261ecSmrg 32905b261ecSmrgextern int ChangeAccessControl(ClientPtr /*client*/, int /*fEnabled*/); 33005b261ecSmrg 33105b261ecSmrgextern int GetAccessControl(void); 33205b261ecSmrg 33305b261ecSmrg 33405b261ecSmrgextern void AddLocalHosts(void); 33505b261ecSmrg 33605b261ecSmrgextern void ResetHosts(char *display); 33705b261ecSmrg 33805b261ecSmrgextern void EnableLocalHost(void); 33905b261ecSmrg 34005b261ecSmrgextern void DisableLocalHost(void); 34105b261ecSmrg 34205b261ecSmrgextern void AccessUsingXdmcp(void); 34305b261ecSmrg 34405b261ecSmrgextern void DefineSelf(int /*fd*/); 34505b261ecSmrg 34605b261ecSmrgextern void AugmentSelf(pointer /*from*/, int /*len*/); 34705b261ecSmrg 34805b261ecSmrgextern void InitAuthorization(char * /*filename*/); 34905b261ecSmrg 35005b261ecSmrg/* extern int LoadAuthorization(void); */ 35105b261ecSmrg 35205b261ecSmrgextern void RegisterAuthorizations(void); 35305b261ecSmrg 35405b261ecSmrgextern int AuthorizationFromID ( 35505b261ecSmrg XID id, 35605b261ecSmrg unsigned short *name_lenp, 35705b261ecSmrg char **namep, 35805b261ecSmrg unsigned short *data_lenp, 35905b261ecSmrg char **datap); 36005b261ecSmrg 36105b261ecSmrgextern XID CheckAuthorization( 36205b261ecSmrg unsigned int /*namelength*/, 36305b261ecSmrg char * /*name*/, 36405b261ecSmrg unsigned int /*datalength*/, 36505b261ecSmrg char * /*data*/, 36605b261ecSmrg ClientPtr /*client*/, 36705b261ecSmrg char ** /*reason*/ 36805b261ecSmrg); 36905b261ecSmrg 37005b261ecSmrgextern void ResetAuthorization(void); 37105b261ecSmrg 37205b261ecSmrgextern int RemoveAuthorization ( 37305b261ecSmrg unsigned short name_length, 37405b261ecSmrg char *name, 37505b261ecSmrg unsigned short data_length, 37605b261ecSmrg char *data); 37705b261ecSmrg 37805b261ecSmrgextern int AddAuthorization( 37905b261ecSmrg unsigned int /*name_length*/, 38005b261ecSmrg char * /*name*/, 38105b261ecSmrg unsigned int /*data_length*/, 38205b261ecSmrg char * /*data*/); 38305b261ecSmrg 38405b261ecSmrgextern XID GenerateAuthorization( 38505b261ecSmrg unsigned int /* name_length */, 38605b261ecSmrg char * /* name */, 38705b261ecSmrg unsigned int /* data_length */, 38805b261ecSmrg char * /* data */, 38905b261ecSmrg unsigned int * /* data_length_return */, 39005b261ecSmrg char ** /* data_return */); 39105b261ecSmrg 39205b261ecSmrg#ifdef COMMANDLINE_CHALLENGED_OPERATING_SYSTEMS 39305b261ecSmrgextern void ExpandCommandLine(int * /*pargc*/, char *** /*pargv*/); 39405b261ecSmrg#endif 39505b261ecSmrg 39605b261ecSmrgextern void ddxInitGlobals(void); 39705b261ecSmrg 39805b261ecSmrgextern int ddxProcessArgument(int /*argc*/, char * /*argv*/ [], int /*i*/); 39905b261ecSmrg 40005b261ecSmrgextern void ddxUseMsg(void); 40105b261ecSmrg 40205b261ecSmrg/* int ReqLen(xReq *req, ClientPtr client) 40305b261ecSmrg * Given a pointer to a *complete* request, return its length in bytes. 40405b261ecSmrg * Note that if the request is a big request (as defined in the Big 40505b261ecSmrg * Requests extension), the macro lies by returning 4 less than the 40605b261ecSmrg * length that it actually occupies in the request buffer. This is so you 40705b261ecSmrg * can blindly compare the length with the various sz_<request> constants 40805b261ecSmrg * in Xproto.h without having to know/care about big requests. 40905b261ecSmrg */ 41005b261ecSmrg#define ReqLen(_pxReq, _client) \ 41105b261ecSmrg ((_pxReq->length ? \ 41205b261ecSmrg (_client->swapped ? lswaps(_pxReq->length) : _pxReq->length) \ 41305b261ecSmrg : ((_client->swapped ? \ 41405b261ecSmrg lswapl(((CARD32*)_pxReq)[1]) : ((CARD32*)_pxReq)[1])-1) \ 41505b261ecSmrg ) << 2) 41605b261ecSmrg 41705b261ecSmrg/* otherReqTypePtr CastxReq(xReq *req, otherReqTypePtr) 41805b261ecSmrg * Cast the given request to one of type otherReqTypePtr to access 41905b261ecSmrg * fields beyond the length field. 42005b261ecSmrg */ 42105b261ecSmrg#define CastxReq(_pxReq, otherReqTypePtr) \ 42205b261ecSmrg (_pxReq->length ? (otherReqTypePtr)_pxReq \ 42305b261ecSmrg : (otherReqTypePtr)(((CARD32*)_pxReq)+1)) 42405b261ecSmrg 42505b261ecSmrg/* stuff for SkippedRequestsCallback */ 42605b261ecSmrgextern CallbackListPtr SkippedRequestsCallback; 42705b261ecSmrgtypedef struct { 42805b261ecSmrg xReqPtr req; 42905b261ecSmrg ClientPtr client; 43005b261ecSmrg int numskipped; 43105b261ecSmrg} SkippedRequestInfoRec; 43205b261ecSmrg 43305b261ecSmrg/* stuff for ReplyCallback */ 43405b261ecSmrgextern CallbackListPtr ReplyCallback; 43505b261ecSmrgtypedef struct { 43605b261ecSmrg ClientPtr client; 43705b261ecSmrg pointer replyData; 43805b261ecSmrg unsigned long dataLenBytes; 43905b261ecSmrg unsigned long bytesRemaining; 44005b261ecSmrg Bool startOfReply; 44105b261ecSmrg} ReplyInfoRec; 44205b261ecSmrg 44305b261ecSmrg/* stuff for FlushCallback */ 44405b261ecSmrgextern CallbackListPtr FlushCallback; 44505b261ecSmrg 44605b261ecSmrgextern void AbortDDX(void); 44705b261ecSmrgextern void ddxGiveUp(void); 44805b261ecSmrgextern int TimeSinceLastInputEvent(void); 44905b261ecSmrg 45005b261ecSmrg/* Logging. */ 45105b261ecSmrgtypedef enum _LogParameter { 45205b261ecSmrg XLOG_FLUSH, 45305b261ecSmrg XLOG_SYNC, 45405b261ecSmrg XLOG_VERBOSITY, 45505b261ecSmrg XLOG_FILE_VERBOSITY 45605b261ecSmrg} LogParameter; 45705b261ecSmrg 45805b261ecSmrg/* Flags for log messages. */ 45905b261ecSmrgtypedef enum { 46005b261ecSmrg X_PROBED, /* Value was probed */ 46105b261ecSmrg X_CONFIG, /* Value was given in the config file */ 46205b261ecSmrg X_DEFAULT, /* Value is a default */ 46305b261ecSmrg X_CMDLINE, /* Value was given on the command line */ 46405b261ecSmrg X_NOTICE, /* Notice */ 46505b261ecSmrg X_ERROR, /* Error message */ 46605b261ecSmrg X_WARNING, /* Warning message */ 46705b261ecSmrg X_INFO, /* Informational message */ 46805b261ecSmrg X_NONE, /* No prefix */ 46905b261ecSmrg X_NOT_IMPLEMENTED, /* Not implemented */ 47005b261ecSmrg X_UNKNOWN = -1 /* unknown -- this must always be last */ 47105b261ecSmrg} MessageType; 47205b261ecSmrg 47305b261ecSmrg/* XXX Need to check which GCC versions have the format(printf) attribute. */ 47405b261ecSmrg#if defined(__GNUC__) && \ 47505b261ecSmrg ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ > 4))) 47605b261ecSmrg#define _printf_attribute(a,b) __attribute((format(__printf__,a,b))) 47705b261ecSmrg#else 47805b261ecSmrg#define _printf_attribute(a,b) /**/ 47905b261ecSmrg#endif 48005b261ecSmrg 48105b261ecSmrgextern const char *LogInit(const char *fname, const char *backup); 48205b261ecSmrgextern void LogClose(void); 48305b261ecSmrgextern Bool LogSetParameter(LogParameter param, int value); 48405b261ecSmrgextern void LogVWrite(int verb, const char *f, va_list args); 48505b261ecSmrgextern void LogWrite(int verb, const char *f, ...) _printf_attribute(2,3); 48605b261ecSmrgextern void LogVMessageVerb(MessageType type, int verb, const char *format, 48705b261ecSmrg va_list args); 48805b261ecSmrgextern void LogMessageVerb(MessageType type, int verb, const char *format, 48905b261ecSmrg ...) _printf_attribute(3,4); 49005b261ecSmrgextern void LogMessage(MessageType type, const char *format, ...) 49105b261ecSmrg _printf_attribute(2,3); 49205b261ecSmrgextern void FreeAuditTimer(void); 49305b261ecSmrgextern void AuditF(const char *f, ...) _printf_attribute(1,2); 49405b261ecSmrgextern void VAuditF(const char *f, va_list args); 49505b261ecSmrgextern void FatalError(const char *f, ...) _printf_attribute(1,2) 49605b261ecSmrg#if defined(__GNUC__) && \ 49705b261ecSmrg ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ > 4))) 49805b261ecSmrg__attribute((noreturn)) 49905b261ecSmrg#endif 50005b261ecSmrg; 50105b261ecSmrg 50205b261ecSmrg#ifdef DEBUG 50305b261ecSmrg#define DebugF ErrorF 50405b261ecSmrg#else 50505b261ecSmrg#define DebugF(x, ...) /* */ 50605b261ecSmrg#endif 50705b261ecSmrg 50805b261ecSmrgextern void VErrorF(const char *f, va_list args); 50905b261ecSmrgextern void ErrorF(const char *f, ...) _printf_attribute(1,2); 51005b261ecSmrgextern void Error(char *str); 51105b261ecSmrgextern void LogPrintMarkers(void); 51205b261ecSmrg 51305b261ecSmrg#endif /* OS_H */ 514