diff options
author | Nikias Bassen | 2018-04-09 16:57:38 +0200 |
---|---|---|
committer | Nikias Bassen | 2018-04-09 16:57:38 +0200 |
commit | e567b881bdce3e3e7b46d2a9d0d344b876257606 (patch) | |
tree | b2c19da5b32374d72f5ddeaab52d4f8ad6baff5e | |
parent | b888970f68fb16961a7cc3a526065fab7a5d96ca (diff) | |
download | usbmuxd-e567b881bdce3e3e7b46d2a9d0d344b876257606.tar.gz usbmuxd-e567b881bdce3e3e7b46d2a9d0d344b876257606.tar.bz2 |
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.
-rw-r--r-- | src/log.c | 16 |
1 files changed, 11 insertions, 5 deletions
@@ -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); } |