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