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