summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2018-04-09 16:57:38 +0200
committerGravatar Nikias Bassen2018-04-09 16:57:38 +0200
commite567b881bdce3e3e7b46d2a9d0d344b876257606 (patch)
treeb2c19da5b32374d72f5ddeaab52d4f8ad6baff5e
parentb888970f68fb16961a7cc3a526065fab7a5d96ca (diff)
downloadusbmuxd-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.c16
1 files 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);
}