From 48f1386fff93a60e17496aef282f069f8c773d7c Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Tue, 5 Apr 2005 06:09:27 +0000 Subject: [PATCH] merge kevin's patches to remove color escape sequences from the logs (bug #3929) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-0@5394 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- CHANGES | 1 + logger.c | 37 +++++++++++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 6bfddef57a..1bb2c48681 100755 --- a/CHANGES +++ b/CHANGES @@ -24,6 +24,7 @@ in some media players -- Fixed if the last line of text in a file for the call spool did not contain a new line, it would not be processed + -- Fixed the logger so that color escape sequences wouldn't be sent to the logs Asterisk 1.0.7 diff --git a/logger.c b/logger.c index cafe4d70db..a8c0c0dbfc 100755 --- a/logger.c +++ b/logger.c @@ -478,9 +478,39 @@ void close_logger(void) return; } +static void strip_coloring(char *str) +{ + char *src, *dest, *end; + + if (!str) + return; + + /* find the first potential escape sequence in the string */ + + src = strchr(str, '\033'); + if (!src) + return; + + dest = src; + while (*src) { + /* at the top of this loop, *src will always be an ESC character */ + if ((src[1] == '[') && ((end = strchr(src + 2, 'm')))) + src = end + 1; + else + *dest++ = *src++; + + /* copy characters, checking for ESC as we go */ + while (*src && (*src != '\033')) + *dest++ = *src++; + } + + *dest = '\0'; +} + static void ast_log_vsyslog(int level, const char *file, int line, const char *function, const char *fmt, va_list args) { char buf[BUFSIZ]; + char *s; if (level >= SYSLOG_NLEVELS) { /* we are locked here, so cannot ast_log() */ @@ -492,9 +522,11 @@ static void ast_log_vsyslog(int level, const char *file, int line, const char *f level = __LOG_DEBUG; } else { snprintf(buf, sizeof(buf), "%s[%ld]: %s:%d in %s: ", - levels[level], (long)GETTID(), file, line, function); + levels[level], (long)GETTID(), file, line, function); } - vsnprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), fmt, args); + s = buf + strlen(buf); + vsnprintf(s, sizeof(buf) - strlen(buf), fmt, args); + strip_coloring(s); syslog(syslog_level_map[level], "%s", buf); } @@ -567,6 +599,7 @@ void ast_log(int level, const char *file, int line, const char *function, const fprintf(chan->fileptr, buf); va_start(ap, fmt); vsnprintf(buf, sizeof(buf), fmt, ap); + strip_coloring(buf); va_end(ap); fputs(buf, chan->fileptr); fflush(chan->fileptr); -- 2.47.2