Fix journal not to truncate long lines
Could happen only for input events.
This commit is contained in:
parent
27212dc46b
commit
f04d1ae032
1 changed files with 62 additions and 27 deletions
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue