From 2cdfec6a3adc361b42c885dad9b0e35a5d9e3cde Mon Sep 17 00:00:00 2001 From: Ron Koenderink Date: Tue, 13 Mar 2007 13:48:11 +0000 Subject: [PATCH] (journal_entry): Print unprintable characters in octal instead of a question mark. --- src/lib/common/journal.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/lib/common/journal.c b/src/lib/common/journal.c index d21aeb12..0a5def27 100644 --- a/src/lib/common/journal.c +++ b/src/lib/common/journal.c @@ -75,23 +75,27 @@ journal_entry(char *fmt, ...) static char buf[1024]; va_list ap; time_t now; - int n, i; + unsigned char *p; if (journal) { time(&now); - n = sprintf(buf, "%.24s %p ", ctime(&now), empth_self()); + fprintf(journal, "%.24s %p ", ctime(&now), empth_self()); + va_start(ap, fmt); - vsnprintf(buf + n, sizeof(buf) - n - 1, fmt, ap); + vsnprintf(buf, sizeof(buf) - 1, fmt, ap); va_end(ap); - for (i = n; buf[i]; ++i) { - if (!isprint((unsigned char)buf[i])) - buf[i] = '?'; /* FIXME replace by escape */ + for (p = buf; *p; p++) { + if (isprint(*p)) + putc(*p, journal); + else + fprintf(journal, "\\%03o", *p); } - buf[i++] = '\n'; - buf[i] = 0; - if (fputs(buf, journal) == EOF) + fputs("\n", journal); + if (ferror(journal)) { logerror("Error writing journal (%s)", strerror(errno)); + clearerr(journal); + } } }