From 30d2457bc54fc0575ac7bd26d811f696a3550ef2 Mon Sep 17 00:00:00 2001 From: Manuel Dejonghe Date: Sun, 12 Feb 2023 21:08:49 +0100 Subject: [PATCH] add a feature/flag for slightly more precise timestamps --- src/log.c | 5 +++-- src/pkcs11-logger.h | 4 +++- src/utils.c | 31 +++++++++++++++++++++++++------ 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/log.c b/src/log.c index 5b7b491..3b64b35 100644 --- a/src/log.c +++ b/src/log.c @@ -120,8 +120,9 @@ void pkcs11_logger_log(const char* message, ...) // Logs separator line void pkcs11_logger_log_separator(void) { - char str_time[20]; - pkcs11_logger_utils_get_current_time_str(str_time, sizeof(str_time)); + unsigned long enable_usecs = (pkcs11_logger_globals.flags & PKCS11_LOGGER_FLAG_ENABLE_USECS) == PKCS11_LOGGER_FLAG_ENABLE_USECS; + char str_time[27]; + pkcs11_logger_utils_get_current_time_str(str_time, sizeof(str_time), enable_usecs); pkcs11_logger_log("****************************** %s ***", str_time); } diff --git a/src/pkcs11-logger.h b/src/pkcs11-logger.h index 323b97c..674934c 100644 --- a/src/pkcs11-logger.h +++ b/src/pkcs11-logger.h @@ -152,6 +152,8 @@ PKCS11_LOGGER_GLOBALS; #define PKCS11_LOGGER_FLAG_ENABLE_STDERR 0x00000020 // Flag that enables reopening of log file #define PKCS11_LOGGER_FLAG_ENABLE_FCLOSE 0x00000040 +// Flag that enabled more precise timestamping +#define PKCS11_LOGGER_FLAG_ENABLE_USECS 0x00000080 // Library name #define PKCS11_LOGGER_NAME "PKCS11-LOGGER" @@ -212,6 +214,6 @@ const char* pkcs11_logger_translate_ck_attribute(CK_ATTRIBUTE_TYPE type); // utils.c - declaration of functions int pkcs11_logger_utils_str_to_long(const char *str, unsigned long *val); -void pkcs11_logger_utils_get_current_time_str(char* buff, int buff_len); +void pkcs11_logger_utils_get_current_time_str(char* buff, int buff_len, unsigned long enable_usecs); unsigned long pkcs11_logger_utils_get_thread_id(void); int pkcs11_logger_utils_get_process_id(void); diff --git a/src/utils.c b/src/utils.c index 729ebe7..f0445f1 100644 --- a/src/utils.c +++ b/src/utils.c @@ -44,7 +44,7 @@ int pkcs11_logger_utils_str_to_long(const char *str, unsigned long *val) // Gets current system time as string -void pkcs11_logger_utils_get_current_time_str(char* buff, int buff_len) +void pkcs11_logger_utils_get_current_time_str(char* buff, int buff_len, unsigned long enable_usecs) { #ifdef _WIN32 @@ -54,8 +54,17 @@ void pkcs11_logger_utils_get_current_time_str(char* buff, int buff_len) memset(buff, 0, buff_len * sizeof(char)); GetLocalTime(&systemtime); - GetDateFormatA(LOCALE_SYSTEM_DEFAULT, 0, &systemtime, "yyyy-MM-dd ", buff, buff_len); - GetTimeFormatA(LOCALE_SYSTEM_DEFAULT, 0, &systemtime, "HH:mm:ss", buff + 11, buff_len - 11); + if (enable_usecs) { + char locBuf [buff_len]; + memset(locBuf, 0, buff_len * sizeof(char)) + GetDateFormatA(LOCALE_SYSTEM_DEFAULT, 0, &systemtime, "yyyy-MM-dd ", locBuf, buff_len); + GetTimeFormatA(LOCALE_SYSTEM_DEFAULT, 0, &systemtime, "HH:mm:ss", locBuf + 11, buff_len - 11); + snprintf(buff, buff_len-1, "%s.03%d", locBuf, systemtime.wMilliseconds); + } + else { + GetDateFormatA(LOCALE_SYSTEM_DEFAULT, 0, &systemtime, "yyyy-MM-dd ", buff, buff_len); + GetTimeFormatA(LOCALE_SYSTEM_DEFAULT, 0, &systemtime, "HH:mm:ss", buff + 11, buff_len - 11); + } #else @@ -64,9 +73,19 @@ void pkcs11_logger_utils_get_current_time_str(char* buff, int buff_len) memset(buff, 0, buff_len * sizeof(char)); - if (gettimeofday(&tv, NULL) == 0) - if (localtime_r(&tv.tv_sec, &tm) != NULL) - strftime(buff, buff_len, "%Y-%m-%d %H:%M:%S", &tm); + if (gettimeofday(&tv, NULL) == 0) { + if (localtime_r(&tv.tv_sec, &tm) != NULL) { + if (enable_usecs) { + char locBuf [buff_len]; + memset(locBuf, 0, buff_len * sizeof(char)); + strftime(locBuf, buff_len, "%Y-%m-%d %H:%M:%S", &tm); + snprintf(buff, buff_len-1, "%s.%06u", locBuf, tv.tv_usec); + } + else { + strftime(buff, buff_len, "%Y-%m-%d %H:%M:%S", &tm); + } + } + } #endif }