Fix journal not to truncate long lines

Could happen only for input events.
This commit is contained in:
Markus Armbruster 2011-04-04 08:00:08 +02:00
parent 27212dc46b
commit f04d1ae032

View file

@ -65,6 +65,8 @@
static char journal_fname[] = "journal.log"; static char journal_fname[] = "journal.log";
static FILE *journal; static FILE *journal;
static void journal_entry_start(char *fmt, ...)
ATTRIBUTE((format (printf, 1, 2)));
static void journal_entry(char *fmt, ...) static void journal_entry(char *fmt, ...)
ATTRIBUTE((format (printf, 1, 2))); ATTRIBUTE((format (printf, 1, 2)));
@ -75,39 +77,70 @@ journal_open(void)
} }
static void static void
journal_entry(char *fmt, ...) journal_entry_vstart(char *fmt, va_list ap)
{ {
static char buf[1024];
va_list ap;
time_t now; time_t now;
if (!journal)
return;
time(&now);
fprintf(journal, "%.24s %10.10s ",
ctime(&now), empth_name(empth_self()));
vfprintf(journal, fmt, ap);
}
static void
journal_entry_start(char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
journal_entry_vstart(fmt, ap);
va_end(ap);
}
static void
journal_entry_pr(char *s, size_t n)
{
unsigned char *p; unsigned char *p;
if (journal) { if (!journal)
time(&now); return;
fprintf(journal, "%.24s %10.10s ", for (p = (unsigned char *)s; *p && n; p++) {
ctime(&now), empth_name(empth_self())); if (*p == '\\')
fputs("\\\\", journal);
va_start(ap, fmt); else if (isprint(*p))
vsnprintf(buf, sizeof(buf) - 1, fmt, ap); putc(*p, journal);
va_end(ap); else
fprintf(journal, "\\%03o", *p);
for (p = (unsigned char *)buf; *p; p++) { n--;
if (*p == '\\')
fprintf(journal, "\\\\");
else if (isprint(*p) || *p == '\t')
putc(*p, journal);
else
fprintf(journal, "\\%03o", *p);
}
fputs("\n", journal);
fflush(journal);
if (ferror(journal)) {
logerror("Error writing journal (%s)", strerror(errno));
clearerr(journal);
}
} }
} }
static void
journal_entry_end(void)
{
if (!journal)
return;
fputc('\n', journal);
fflush(journal);
if (ferror(journal)) {
logerror("Error writing journal (%s)", strerror(errno));
clearerr(journal);
}
}
static void
journal_entry(char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
journal_entry_vstart(fmt, ap);
va_end(ap);
journal_entry_end();
}
int int
journal_startup(void) journal_startup(void)
{ {
@ -172,7 +205,9 @@ journal_logout(void)
void void
journal_input(char *input) journal_input(char *input)
{ {
journal_entry("input %s", input); journal_entry_start("input ");
journal_entry_pr(input, -1);
journal_entry_end();
} }
void void