From e567b881bdce3e3e7b46d2a9d0d344b876257606 Mon Sep 17 00:00:00 2001 From: Nikias Bassen Date: Mon, 9 Apr 2018 16:57:38 +0200 Subject: log: Fix timestamps being printed incorrectly when running in foreground Due to usage of wrong function (get_tick_count) the timestamps have been printed incorrectly based on clock_gettime. This commit fixes it by using gettimeofday correctly and also makes sure that this is thread-safe by using localtime_r if available. Furthermore, this commit will also have the effect that when logging through syslog we don't determine the current time anymore because the timestamp is not even used. --- src/log.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/log.c b/src/log.c index 46839ee..cd7c2d5 100644 --- a/src/log.c +++ b/src/log.c @@ -65,20 +65,26 @@ void usbmuxd_log(enum loglevel level, const char *fmt, ...) { va_list ap; char *fs; - struct timeval ts; - struct tm *tp; if(level > log_level) return; - get_tick_count(&ts); - tp = localtime(&ts.tv_sec); - fs = malloc(20 + strlen(fmt)); if(log_syslog) { sprintf(fs, "[%d] %s\n", level, fmt); } else { + struct timeval ts; + struct tm tp_; + struct tm *tp; + + gettimeofday(&ts, NULL); +#ifdef HAVE_LOCALTIME_R + tp = localtime_r(&ts.tv_sec, &tp_); +#else + tp = localtime(&ts.tv_sec); +#endif + strftime(fs, 10, "[%H:%M:%S", tp); sprintf(fs+9, ".%03d][%d] %s\n", (int)(ts.tv_usec / 1000), level, fmt); } -- cgit v1.1-32-gdbae