From df20de186c5a014c4064a4f6e57bd53493c37348 Mon Sep 17 00:00:00 2001 From: Frediano Ziglio Date: Tue, 29 May 2018 01:01:23 +0100 Subject: [PATCH 36/43] vdlog: Factor our a "logf" function to avoid long "LOG" macro Signed-off-by: Frediano Ziglio Acked-by: Jonathon Jongsma --- common/vdlog.cpp | 26 ++++++++++++++++++++++++++ common/vdlog.h | 15 +++++---------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/common/vdlog.cpp b/common/vdlog.cpp index 8af6dcc..8c11d33 100644 --- a/common/vdlog.cpp +++ b/common/vdlog.cpp @@ -79,6 +79,32 @@ void VDLog::printf(const char* format, ...) fflush(fh); } +void VDLog::logf(const char *type, const char *function, const char* format, ...) +{ + FILE *fh = _log ? _log->_handle : stdout; + va_list args; + + struct _timeb now; + struct tm today; + char datetime_str[20]; + _ftime_s(&now); + localtime_s(&today, &now.time); + strftime(datetime_str, 20, "%Y-%m-%d %H:%M:%S", &today); + + _lock_file(fh); + fprintf(fh, "%lu::%s::%s,%.3d::%s::", + GetCurrentThreadId(), type, + datetime_str, + now.millitm, + function); + + va_start(args, format); + vfprintf(fh, format, args); + va_end(args); + _unlock_file(fh); + fflush(fh); +} + void log_version() { // print same version as resource one diff --git a/common/vdlog.h b/common/vdlog.h index d017ac3..c80a199 100644 --- a/common/vdlog.h +++ b/common/vdlog.h @@ -35,6 +35,10 @@ public: __attribute__((__format__ (gnu_printf, 1, 2))) #endif static void printf(const char* format, ...); +#ifdef __GNUC__ + __attribute__((__format__ (gnu_printf, 3, 4))) +#endif + static void logf(const char *type, const char *function, const char* format, ...); private: VDLog(FILE* handle); @@ -60,16 +64,7 @@ static const VDLogLevel log_level = LOG_INFO; #define LOG(type, format, ...) do { \ if (LOG_ ## type >= log_level && LOG_ ## type <= LOG_FATAL) { \ - struct _timeb now; \ - struct tm today; \ - char datetime_str[20]; \ - _ftime_s(&now); \ - localtime_s(&today, &now.time); \ - strftime(datetime_str, 20, "%Y-%m-%d %H:%M:%S", &today); \ - VDLog::printf("%lu::%s::%s,%.3d::%s::" format "\n", \ - GetCurrentThreadId(), #type, \ - datetime_str, now.millitm, \ - __FUNCTION__, ## __VA_ARGS__); \ + VDLog::logf(#type, __FUNCTION__, format "\n", ## __VA_ARGS__); \ } \ } while(0) -- 2.17.1