Strip timestamps from log replay

Also fix string length. %.*s does not behave as one might expect when
writing wchar_t.
weechat-hashes
Curtis McEnroe 2018-11-29 18:52:03 -05:00
parent d7659376d1
commit 908b834c1a
No known key found for this signature in database
GPG Key ID: CEA2F97ADCFCD77C
1 changed files with 7 additions and 3 deletions

10
log.c
View File

@ -91,6 +91,8 @@ static FILE *logFile(struct Tag tag, const struct tm *time) {
return log->file; return log->file;
} }
enum { StampSize = sizeof("YYYY-MM-DDThh:mm:ss+hhmm") };
void logFmt(struct Tag tag, const time_t *ts, const char *format, ...) { void logFmt(struct Tag tag, const time_t *ts, const char *format, ...) {
if (logRoot < 0) return; if (logRoot < 0) return;
@ -105,8 +107,8 @@ void logFmt(struct Tag tag, const time_t *ts, const char *format, ...) {
FILE *file = logFile(tag, time); FILE *file = logFile(tag, time);
char stamp[sizeof("YYYY-MM-DDThh:mm:ss+hhmm")]; char stamp[StampSize];
strftime(stamp, sizeof(stamp), "%FT%T%z", time); strftime(stamp, StampSize, "%FT%T%z", time);
fprintf(file, "[%s] ", stamp); fprintf(file, "[%s] ", stamp);
if (ferror(file)) err(EX_IOERR, "%s", tag.name); if (ferror(file)) err(EX_IOERR, "%s", tag.name);
@ -133,7 +135,9 @@ void logReplay(struct Tag tag) {
size_t len; size_t len;
char *line; char *line;
while (NULL != (line = fgetln(file, &len))) { while (NULL != (line = fgetln(file, &len))) {
uiFmt(tag, UICold, "\3%d%.*s", IRCGray, (int)(len - 1), line); line[len - 1] = '\0';
if (len > 2 + StampSize) line = &line[2 + StampSize];
uiFmt(tag, UICold, "\3%d%s", IRCGray, line);
} }
if (ferror(file)) err(EX_IOERR, "%s", tag.name); if (ferror(file)) err(EX_IOERR, "%s", tag.name);
} }