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 /src | |
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.
Diffstat (limited to 'src')
-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); } |