From 236528e6c34606004d591cd9f4860f3f9fe18008 Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Tue, 21 Jul 2020 19:56:12 +0200 Subject: [PATCH] WIP: Change log macro, to be able to pass a single string and not a stupid format As an example: BEFORE: LOG_ERROR("FOO", "%s", "BAR"); AFTER: LOG_ERROR("FOO", "BAR"); --- inc/lektor/macro.h | 22 ++++++---------------- src/base/common.c | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/inc/lektor/macro.h b/inc/lektor/macro.h index 7938570b..6340969f 100644 --- a/inc/lektor/macro.h +++ b/inc/lektor/macro.h @@ -13,8 +13,6 @@ /* Macros */ -#define BRACKETS_THAT(that) (that) - #ifndef MAX #define MAX(a, b) ((a) < (b) ? (b) : (a)) #endif /* MAX */ @@ -54,19 +52,11 @@ enum log_level { DEBUG = 4, }; -#define LOG(format, level, section, ...) \ - { \ - if (level <= log_level) \ - fprintf(stderr, " %c %s%s: " format "\n", \ - level == ERROR ? '!' : level == WARN ? '*' : level == INFO ? '.' : ' ', \ - sizeof(section) > sizeof("") ? ("[" section "] ") : "", \ - __func__, \ - __VA_ARGS__); \ - } -#define LOG_INFO(section, format, ...) LOG(format, INFO, section, __VA_ARGS__) -#define LOG_WARN(section, format, ...) LOG(format, WARN, section, __VA_ARGS__) -#define LOG_ERROR(section, format, ...) LOG(format, ERROR, section, __VA_ARGS__) -#define LOG_DEBUG(section, format, ...) LOG(format, DEBUG, section, __VA_ARGS__) +void __lkt_log(enum log_level, const char *section, const char *func, const char *format, ...); +#define LOG_INFO( section, ...) __lkt_log(INFO, section, __func__, __VA_ARGS__) +#define LOG_WARN( section, ...) __lkt_log(WARN, section, __func__, __VA_ARGS__) +#define LOG_ERROR(section, ...) __lkt_log(ERROR, section, __func__, __VA_ARGS__) +#define LOG_DEBUG(section, ...) __lkt_log(DEBUG, section, __func__, __VA_ARGS__) /* Defines for lektor */ @@ -174,7 +164,7 @@ typedef volatile enum { #define STR_MATCH(str1, str2) (! strcasecmp(str1, str2)) #define STR_NMATCH(str1, str2, n) (! strncasecmp(str1, str2, n)) -#define sqlite3_column_chars BRACKETS_THAT(const char *) sqlite3_column_text +#define sqlite3_column_chars (const char *) sqlite3_column_text #define GET_VA_COUNT(...) PP_NARG_(__VA_ARGS__,PP_RSEQ_N()) #define PP_NARG_(...) PP_ARG_N(__VA_ARGS__) diff --git a/src/base/common.c b/src/base/common.c index f46e6146..d1a7694b 100644 --- a/src/base/common.c +++ b/src/base/common.c @@ -10,6 +10,22 @@ int log_level = 0; /* None by default */ +void +__lkt_log(enum log_level level, const char *section, const char *func, const char *format, ...) +{ + char line[LKT_MESSAGE_MAX]; + va_list ap; + + if (level <= log_level) { + safe_snprintf(line, LKT_MESSAGE_MAX, " %c [%s] %s: %s\n", + level == ERROR ? '!' : level == WARN ? '*' : level == INFO ? '.' : ' ', + section, __func__, format); + va_start(ap, format); + vfprintf(stderr, line, ap); + va_end(ap); + } +} + void __not_implemented(const char *func, char *file, int line) { -- GitLab