diff options
Diffstat (limited to 'xorg-server/os/log.c')
-rw-r--r-- | xorg-server/os/log.c | 311 |
1 files changed, 160 insertions, 151 deletions
diff --git a/xorg-server/os/log.c b/xorg-server/os/log.c index 671a01bb6..1b1b28519 100644 --- a/xorg-server/os/log.c +++ b/xorg-server/os/log.c @@ -24,7 +24,6 @@ not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from The Open Group. - Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts, Copyright 1994 Quarterdeck Office Systems. @@ -76,7 +75,6 @@ OR PERFORMANCE OF THIS SOFTWARE. * authorization from the copyright holder(s) and author(s). */ - #ifdef HAVE_DIX_CONFIG_H #include <dix-config.h> #endif @@ -86,7 +84,7 @@ OR PERFORMANCE OF THIS SOFTWARE. #include <time.h> #include <sys/stat.h> #include <stdarg.h> -#include <stdlib.h> /* for malloc() */ +#include <stdlib.h> /* for malloc() */ #include "input.h" #include "site.h" @@ -106,7 +104,7 @@ OR PERFORMANCE OF THIS SOFTWARE. #endif #ifdef DDXOSVERRORF -void (*OsVendorVErrorFProc)(const char *, va_list args) = NULL; +void (*OsVendorVErrorFProc) (const char *, va_list args) = NULL; #endif static FILE *logFile = NULL; @@ -123,13 +121,15 @@ static Bool needBuffer = TRUE; #ifdef __APPLE__ #include <AvailabilityMacros.h> -static char __crashreporter_info_buff__[4096] = {0}; -static const char *__crashreporter_info__ __attribute__((__used__)) = &__crashreporter_info_buff__[0]; +static char __crashreporter_info_buff__[4096] = { 0 }; + +static const char *__crashreporter_info__ __attribute__ ((__used__)) = + &__crashreporter_info_buff__[0]; #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050 // This is actually a toolchain requirement, but I'm not sure the correct check, // but it should be fine to just only include it for Leopard and later. This line // just tells the linker to never strip this symbol (such as for space optimization) -asm (".desc ___crashreporter_info__, 0x10"); +asm(".desc ___crashreporter_info__, 0x10"); #endif #endif @@ -164,6 +164,9 @@ asm (".desc ___crashreporter_info__, 0x10"); #ifndef X_NOT_IMPLEMENTED_STRING #define X_NOT_IMPLEMENTED_STRING "(NI)" #endif +#ifndef X_DEBUG_STRING +#define X_DEBUG_STRING "(DB)" +#endif #ifndef X_NONE_STRING #define X_NONE_STRING "" #endif @@ -183,39 +186,39 @@ LogInit(const char *fname, const char *backup) char *logFileName = NULL; if (fname && *fname) { - if (asprintf(&logFileName, fname, display) == -1) - FatalError("Cannot allocate space for the log file name\n"); - - if (backup && *backup) { - struct stat buf; - - if (!stat(logFileName, &buf) && S_ISREG(buf.st_mode)) { - char *suffix; - char *oldLog; - - if ((asprintf(&suffix, backup, display) == -1) || - (asprintf(&oldLog, "%s%s", logFileName, suffix) == -1)) - FatalError("Cannot allocate space for the log file name\n"); - free(suffix); - if (rename(logFileName, oldLog) == -1) { - FatalError("Cannot move old log file \"%s\" to \"%s\"\n", - logFileName, oldLog); - } - free(oldLog); - } - } - if ((logFile = fopen(logFileName, "w")) == NULL) - FatalError("Cannot open log file \"%s\"\n", logFileName); - setvbuf(logFile, NULL, _IONBF, 0); - - /* Flush saved log information. */ - if (saveBuffer && bufferSize > 0) { - fwrite(saveBuffer, bufferPos, 1, logFile); - fflush(logFile); + if (asprintf(&logFileName, fname, display) == -1) + FatalError("Cannot allocate space for the log file name\n"); + + if (backup && *backup) { + struct stat buf; + + if (!stat(logFileName, &buf) && S_ISREG(buf.st_mode)) { + char *suffix; + char *oldLog; + + if ((asprintf(&suffix, backup, display) == -1) || + (asprintf(&oldLog, "%s%s", logFileName, suffix) == -1)) + FatalError("Cannot allocate space for the log file name\n"); + free(suffix); + if (rename(logFileName, oldLog) == -1) { + FatalError("Cannot move old log file \"%s\" to \"%s\"\n", + logFileName, oldLog); + } + free(oldLog); + } + } + if ((logFile = fopen(logFileName, "w")) == NULL) + FatalError("Cannot open log file \"%s\"\n", logFileName); + setvbuf(logFile, NULL, _IONBF, 0); + + /* Flush saved log information. */ + if (saveBuffer && bufferSize > 0) { + fwrite(saveBuffer, bufferPos, 1, logFile); + fflush(logFile); #ifndef WIN32 - fsync(fileno(logFile)); + fsync(fileno(logFile)); #endif - } + } } /* @@ -223,9 +226,9 @@ LogInit(const char *fname, const char *backup) * needed. */ if (saveBuffer && bufferSize > 0) { - free(saveBuffer); /* Must be free(), not free() */ - saveBuffer = NULL; - bufferSize = 0; + free(saveBuffer); /* Must be free(), not free() */ + saveBuffer = NULL; + bufferSize = 0; } needBuffer = FALSE; @@ -236,10 +239,10 @@ void LogClose(enum ExitCode error) { if (logFile) { - ErrorF("Server terminated %s (%d). Closing log file.\n", - (error == EXIT_NO_ERROR) ? "successfully" : "with error", error); - fclose(logFile); - logFile = NULL; + ErrorF("Server terminated %s (%d). Closing log file.\n", + (error == EXIT_NO_ERROR) ? "successfully" : "with error", error); + fclose(logFile); + logFile = NULL; } } @@ -248,19 +251,19 @@ LogSetParameter(LogParameter param, int value) { switch (param) { case XLOG_FLUSH: - logFlush = value ? TRUE : FALSE; - return TRUE; + logFlush = value ? TRUE : FALSE; + return TRUE; case XLOG_SYNC: - logSync = value ? TRUE : FALSE; - return TRUE; + logSync = value ? TRUE : FALSE; + return TRUE; case XLOG_VERBOSITY: - logVerbosity = value; - return TRUE; + logVerbosity = value; + return TRUE; case XLOG_FILE_VERBOSITY: - logFileVerbosity = value; - return TRUE; + logFileVerbosity = value; + return TRUE; default: - return FALSE; + return FALSE; } } @@ -274,10 +277,10 @@ LogVWrite(int verb, const char *f, va_list args) static Bool newline = TRUE; if (newline) { - sprintf(tmpBuffer, "[%10.3f] ", GetTimeInMillis() / 1000.0); - len = strlen(tmpBuffer); - if (logFile) - fwrite(tmpBuffer, len, 1, logFile); + sprintf(tmpBuffer, "[%10.3f] ", GetTimeInMillis() / 1000.0); + len = strlen(tmpBuffer); + if (logFile) + fwrite(tmpBuffer, len, 1, logFile); } /* @@ -286,34 +289,35 @@ LogVWrite(int verb, const char *f, va_list args) * stream(s). */ if (verb < 0 || logFileVerbosity >= verb || logVerbosity >= verb) { - vsnprintf(tmpBuffer, sizeof(tmpBuffer), f, args); - len = strlen(tmpBuffer); + vsnprintf(tmpBuffer, sizeof(tmpBuffer), f, args); + len = strlen(tmpBuffer); } - newline = (tmpBuffer[len-1] == '\n'); + newline = (tmpBuffer[len - 1] == '\n'); if ((verb < 0 || logVerbosity >= verb) && len > 0) - fwrite(tmpBuffer, len, 1, stderr); + fwrite(tmpBuffer, len, 1, stderr); if ((verb < 0 || logFileVerbosity >= verb) && len > 0) { - if (logFile) { - fwrite(tmpBuffer, len, 1, logFile); - if (logFlush) { - fflush(logFile); + if (logFile) { + fwrite(tmpBuffer, len, 1, logFile); + if (logFlush) { + fflush(logFile); #ifndef WIN32 - if (logSync) - fsync(fileno(logFile)); + if (logSync) + fsync(fileno(logFile)); #endif - } - } else if (needBuffer) { - if (len > bufferUnused) { - bufferSize += 1024; - bufferUnused += 1024; - saveBuffer = realloc(saveBuffer, bufferSize); - if (!saveBuffer) - FatalError("realloc() failed while saving log messages\n"); - } - bufferUnused -= len; - memcpy(saveBuffer + bufferPos, tmpBuffer, len); - bufferPos += len; - } + } + } + else if (needBuffer) { + if (len > bufferUnused) { + bufferSize += 1024; + bufferUnused += 1024; + saveBuffer = realloc(saveBuffer, bufferSize); + if (!saveBuffer) + FatalError("realloc() failed while saving log messages\n"); + } + bufferUnused -= len; + memcpy(saveBuffer + bufferPos, tmpBuffer, len); + bufferPos += len; + } } } @@ -333,36 +337,38 @@ static const char * LogMessageTypeVerbString(MessageType type, int verb) { if (type == X_ERROR) - verb = 0; + verb = 0; if (logVerbosity < verb && logFileVerbosity < verb) - return NULL; + return NULL; switch (type) { case X_PROBED: - return X_PROBE_STRING; + return X_PROBE_STRING; case X_CONFIG: - return X_CONFIG_STRING; + return X_CONFIG_STRING; case X_DEFAULT: - return X_DEFAULT_STRING; + return X_DEFAULT_STRING; case X_CMDLINE: - return X_CMDLINE_STRING; + return X_CMDLINE_STRING; case X_NOTICE: - return X_NOTICE_STRING; + return X_NOTICE_STRING; case X_ERROR: - return X_ERROR_STRING; + return X_ERROR_STRING; case X_WARNING: - return X_WARNING_STRING; + return X_WARNING_STRING; case X_INFO: - return X_INFO_STRING; + return X_INFO_STRING; case X_NOT_IMPLEMENTED: - return X_NOT_IMPLEMENTED_STRING; + return X_NOT_IMPLEMENTED_STRING; case X_UNKNOWN: - return X_UNKNOWN_STRING; + return X_UNKNOWN_STRING; case X_NONE: - return X_NONE_STRING; + return X_NONE_STRING; + case X_DEBUG: + return X_DEBUG_STRING; default: - return X_UNKNOWN_STRING; + return X_UNKNOWN_STRING; } } @@ -375,7 +381,7 @@ LogVMessageVerb(MessageType type, int verb, const char *format, va_list args) type_str = LogMessageTypeVerbString(type, verb); if (!type_str) - return; + return; /* if type_str is not "", prepend it and ' ', to format */ if (type_str[0] == '\0') @@ -410,10 +416,9 @@ LogMessage(MessageType type, const char *format, ...) va_end(ap); } - void LogVHdrMessageVerb(MessageType type, int verb, const char *msg_format, - va_list msg_args, const char *hdr_format, va_list hdr_args) + va_list msg_args, const char *hdr_format, va_list hdr_args) { const char *type_str; char tmpFormat[1024]; @@ -423,29 +428,29 @@ LogVHdrMessageVerb(MessageType type, int verb, const char *msg_format, type_str = LogMessageTypeVerbString(type, verb); if (!type_str) - return; + return; /* if type_str != "", copy it and ' ' to tmpFormat; set p after ' ' */ p = tmpFormat; if (type_str[0] != '\0') - p += snprintf(tmpFormat, sizeof(tmpFormat), "%s ", type_str); + p += snprintf(tmpFormat, sizeof(tmpFormat), "%s ", type_str); /* append as much of hdr as fits after type_str (if there was one) */ left = tmpFormat_end - p; if (left > 1) - p += vsnprintf(p, left, hdr_format, hdr_args); + p += vsnprintf(p, left, hdr_format, hdr_args); /* append as much of msg_format as will fit after hdr */ left = tmpFormat_end - p; if (left > 1) - snprintf(p, left, "%s", msg_format); + snprintf(p, left, "%s", msg_format); LogVWrite(verb, tmpFormat, msg_args); } void LogHdrMessageVerb(MessageType type, int verb, const char *msg_format, - va_list msg_args, const char *hdr_format, ...) + va_list msg_args, const char *hdr_format, ...) { va_list hdr_args; @@ -456,7 +461,7 @@ LogHdrMessageVerb(MessageType type, int verb, const char *msg_format, void LogHdrMessage(MessageType type, const char *msg_format, va_list msg_args, - const char *hdr_format, ...) + const char *hdr_format, ...) { va_list hdr_args; @@ -466,7 +471,8 @@ LogHdrMessage(MessageType type, const char *msg_format, va_list msg_args, } void -AbortServer(void) _X_NORETURN; +AbortServer(void) + _X_NORETURN; void AbortServer(void) @@ -480,13 +486,13 @@ AbortServer(void) AbortDDX(EXIT_ERR_ABORT); fflush(stderr); if (CoreDump) - OsAbort(); - exit (1); + OsAbort(); + exit(1); } #define AUDIT_PREFIX "AUDIT: %s: %ld: " #ifndef AUDIT_TIMEOUT -#define AUDIT_TIMEOUT ((CARD32)(120 * 1000)) /* 2 mn */ +#define AUDIT_TIMEOUT ((CARD32)(120 * 1000)) /* 2 mn */ #endif static int nrepeat = 0; @@ -497,10 +503,10 @@ void FreeAuditTimer(void) { if (auditTimer != NULL) { - /* Force output of pending messages */ - TimerForce(auditTimer); - TimerFree(auditTimer); - auditTimer = NULL; + /* Force output of pending messages */ + TimerForce(auditTimer); + TimerFree(auditTimer); + auditTimer = NULL; } } @@ -515,17 +521,17 @@ AuditPrefix(void) time(&tm); autime = ctime(&tm); if ((s = strchr(autime, '\n'))) - *s = '\0'; + *s = '\0'; len = strlen(AUDIT_PREFIX) + strlen(autime) + 10 + 1; tmpBuf = malloc(len); if (!tmpBuf) - return NULL; - snprintf(tmpBuf, len, AUDIT_PREFIX, autime, (unsigned long)getpid()); + return NULL; + snprintf(tmpBuf, len, AUDIT_PREFIX, autime, (unsigned long) getpid()); return tmpBuf; } void -AuditF(const char * f, ...) +AuditF(const char *f, ...) { va_list args; @@ -541,16 +547,17 @@ AuditFlush(OsTimerPtr timer, CARD32 now, pointer arg) char *prefix; if (nrepeat > 0) { - prefix = AuditPrefix(); - ErrorF("%slast message repeated %d times\n", - prefix != NULL ? prefix : "", nrepeat); - nrepeat = 0; - free(prefix); - return AUDIT_TIMEOUT; - } else { - /* if the timer expires without anything to print, flush the message */ - oldlen = -1; - return 0; + prefix = AuditPrefix(); + ErrorF("%slast message repeated %d times\n", + prefix != NULL ? prefix : "", nrepeat); + nrepeat = 0; + free(prefix); + return AUDIT_TIMEOUT; + } + else { + /* if the timer expires without anything to print, flush the message */ + oldlen = -1; + return 0; } } @@ -566,17 +573,18 @@ VAuditF(const char *f, va_list args) len = vsnprintf(buf, sizeof(buf), f, args); if (len == oldlen && strcmp(buf, oldbuf) == 0) { - /* Message already seen */ - nrepeat++; - } else { - /* new message */ - if (auditTimer != NULL) - TimerForce(auditTimer); - ErrorF("%s%s", prefix != NULL ? prefix : "", buf); - strlcpy(oldbuf, buf, sizeof(oldbuf)); - oldlen = len; - nrepeat = 0; - auditTimer = TimerSet(auditTimer, 0, AUDIT_TIMEOUT, AuditFlush, NULL); + /* Message already seen */ + nrepeat++; + } + else { + /* new message */ + if (auditTimer != NULL) + TimerForce(auditTimer); + ErrorF("%s%s", prefix != NULL ? prefix : "", buf); + strlcpy(oldbuf, buf, sizeof(oldbuf)); + oldlen = len; + nrepeat = 0; + auditTimer = TimerSet(auditTimer, 0, AUDIT_TIMEOUT, AuditFlush, NULL); } free(prefix); } @@ -588,16 +596,18 @@ FatalError(const char *f, ...) static Bool beenhere = FALSE; if (beenhere) - ErrorF("\nFatalError re-entered, aborting\n"); + ErrorF("\nFatalError re-entered, aborting\n"); else - ErrorF("\nFatal server error:\n"); + ErrorF("\nFatal server error:\n"); va_start(args, f); #ifdef __APPLE__ { va_list args2; + va_copy(args2, args); - (void)vsnprintf(__crashreporter_info_buff__, sizeof(__crashreporter_info_buff__), f, args2); + (void) vsnprintf(__crashreporter_info_buff__, + sizeof(__crashreporter_info_buff__), f, args2); va_end(args2); } #endif @@ -605,30 +615,30 @@ FatalError(const char *f, ...) va_end(args); ErrorF("\n"); if (!beenhere) - OsVendorFatalError(); + OsVendorFatalError(); if (!beenhere) { - beenhere = TRUE; - AbortServer(); - } else - OsAbort(); - /*NOTREACHED*/ -} + beenhere = TRUE; + AbortServer(); + } + else + OsAbort(); + /*NOTREACHED*/} void VErrorF(const char *f, va_list args) { #ifdef DDXOSVERRORF if (OsVendorVErrorFProc) - OsVendorVErrorFProc(f, args); + OsVendorVErrorFProc(f, args); else - LogVWrite(-1, f, args); + LogVWrite(-1, f, args); #else LogVWrite(-1, f, args); #endif } void -ErrorF(const char * f, ...) +ErrorF(const char *f, ...) { va_list args; @@ -653,4 +663,3 @@ LogPrintMarkers(void) LogMessageVerb(X_NOT_IMPLEMENTED, 0, "not implemented, "); LogMessageVerb(X_UNKNOWN, 0, "unknown.\n"); } - |