diff options
author | 2019-10-24 17:06:52 +0300 | |
---|---|---|
committer | 2019-10-24 17:06:52 +0300 | |
commit | ae76e4106345035503466bf9dcfa3b0033a526c6 (patch) | |
tree | 50ebddc83138785ec775aeb8e1c7ac06c7395706 | |
parent | 84cec7dc2c645e4d1bbab8e8496c4f6cd9562989 (diff) | |
download | librin-ae76e4106345035503466bf9dcfa3b0033a526c6.tar.gz librin-ae76e4106345035503466bf9dcfa3b0033a526c6.tar.bz2 librin-ae76e4106345035503466bf9dcfa3b0033a526c6.zip |
diagnostic: implement printing function's name.
Signed-off-by: Gediminas Jakutis <gediminas@varciai.lt>
-rw-r--r-- | include/rin/definitions.h | 2 | ||||
-rw-r--r-- | include/rin/diagnostic.h | 17 | ||||
-rw-r--r-- | src/diagnostic/diagnostic.c | 22 | ||||
-rw-r--r-- | src/diagnostic/diagnostic_private.h | 2 | ||||
-rw-r--r-- | test/diagnostic.c | 16 |
5 files changed, 35 insertions, 24 deletions
diff --git a/include/rin/definitions.h b/include/rin/definitions.h index 9995e0f..75e4da0 100644 --- a/include/rin/definitions.h +++ b/include/rin/definitions.h @@ -28,7 +28,7 @@ # define WEAK_SYM __attribute__((weak)) /* allow the compiler to check varargs */ -# define FORMAT_STRING(a, b) __attribute__((format (printf, a, b))) +# define FORMAT_STRING(a, b) __attribute__((format (gnu_printf, a, b))) /* optimizing likely / unlikely branches */ # define likely(a) (__builtin_expect(!!(a), 1)) diff --git a/include/rin/diagnostic.h b/include/rin/diagnostic.h index 09d2fb9..ccec0b8 100644 --- a/include/rin/diagnostic.h +++ b/include/rin/diagnostic.h @@ -28,9 +28,11 @@ #define RIN_DIAG_UNSET 0 #define RIN_DIAG_PREFIX (1 << 0) #define RIN_DIAG_TIME (1 << 1) -#define RIN_DIAG_THREADNUM (1 << 2) +#define RIN_DIAG_FUNC (1 << 2) +#define RIN_DIAG_THREADNUM (1 << 3) #define RIN_DIAG_ALLFLAGS ( RIN_DIAG_PREFIX | \ RIN_DIAG_TIME | \ + RIN_DIAG_FUNC | \ RIN_DIAG_THREADNUM) enum rin_diag_outstream { @@ -44,9 +46,14 @@ void rin_diag_init(void); int rin_diag_flags(int flag, int action); int rin_diag_set_outstream(enum rin_diag_outstream channel, FILE *stream); -void rin_err(const char *format, ...) FORMAT_STRING(1, 2); -void rin_fixme(const char *format, ...) FORMAT_STRING(1, 2); -void rin_warn(const char *format, ...) FORMAT_STRING(1, 2); -void rin_info(const char *format, ...) FORMAT_STRING(1, 2); +void __rin_err(const char *func_name, const char *format, ...) FORMAT_STRING(2, 3); +void __rin_warn(const char *func_name, const char *format, ...) FORMAT_STRING(2, 3); +void __rin_fixme(const char *func_name, const char *format, ...) FORMAT_STRING(2, 3); +void __rin_info(const char *func_name, const char *format, ...) FORMAT_STRING(2, 3); + +#define rin_err(a,...) do {__rin_err(__func__, a __VA_OPT__(,) __VA_ARGS__); } while (0) +#define rin_warn(a,...) do {__rin_warn(__func__, a __VA_OPT__(,) __VA_ARGS__); } while (0) +#define rin_fixme(a,...) do {__rin_fixme(__func__, a __VA_OPT__(,) __VA_ARGS__); } while (0) +#define rin_info(a,...) do {__rin_info(__func__, a __VA_OPT__(,) __VA_ARGS__); } while (0) #endif /* LIBRIN_DIAGNOSTIC_INCLUDED */ diff --git a/src/diagnostic/diagnostic.c b/src/diagnostic/diagnostic.c index 4c4a993..1258711 100644 --- a/src/diagnostic/diagnostic.c +++ b/src/diagnostic/diagnostic.c @@ -81,39 +81,39 @@ int rin_diag_set_outstream(enum rin_diag_outstream channel, FILE *stream) return 0; } -void rin_err(const char *format, ...) +void __rin_err(const char *func_name, const char *format, ...) { va_list args; va_start(args, format); - __rin_msg(state.err ? state.err : stderr, "error", format, args); + __rin_msg(state.err ? state.err : stderr, "error", func_name, format, args); } -void rin_warn(const char *format, ...) +void __rin_warn(const char *func_name, const char *format, ...) { va_list args; va_start(args, format); - __rin_msg(state.warn ? state.warn : stderr, "warning", format, args); + __rin_msg(state.warn ? state.warn : stderr, "warning", func_name, format, args); } -void rin_fixme(const char *format, ...) +void __rin_fixme(const char *func_name, const char *format, ...) { va_list args; va_start(args, format); - __rin_msg(state.fixme ? state.fixme : stderr, "fixme", format, args); + __rin_msg(state.fixme ? state.fixme : stderr, "fixme", func_name, format, args); } -void rin_info(const char *format, ...) +void __rin_info(const char *func_name, const char *format, ...) { va_list args; va_start(args, format); - __rin_msg(state.info ? state.info : stdout, "info", format, args); + __rin_msg(state.info ? state.info : stdout, "info", func_name, format, args); } -static void __rin_msg(FILE *stream, const char *prefix, const char *format, va_list args) +static void __rin_msg(FILE *stream, const char *prefix, const char *func_name, const char *format, va_list args) { if (state.flags & RIN_DIAG_PREFIX) { fprintf(stream, "%s:", prefix); @@ -123,6 +123,10 @@ static void __rin_msg(FILE *stream, const char *prefix, const char *format, va_l fprintf(stream, state.pidconv, gettid()); } + if (state.flags & RIN_DIAG_FUNC) { + fprintf(stream, "%s:", func_name); + } + if (state.flags & RIN_DIAG_TIME) { struct timespec t; clock_gettime(RIN_CLOCK_WALL_COUNTER, &t); diff --git a/src/diagnostic/diagnostic_private.h b/src/diagnostic/diagnostic_private.h index 981bbe9..4f0033f 100644 --- a/src/diagnostic/diagnostic_private.h +++ b/src/diagnostic/diagnostic_private.h @@ -28,6 +28,6 @@ #define RIN_NEED_GETTID #include "rin/compat.h" -static void __rin_msg(FILE *stream, const char *prefix, const char *format, va_list args); +static void __rin_msg(FILE *stream, const char *prefix, const char *func_name, const char *format, va_list args); #endif /* LIBRIN_DIAGNOSTIC_PRIVATE_INCLUDED */ diff --git a/test/diagnostic.c b/test/diagnostic.c index 0252771..35866df 100644 --- a/test/diagnostic.c +++ b/test/diagnostic.c @@ -42,7 +42,7 @@ static int clean_test(void); static struct stdiocap capture_stdio_start(FILE *stream); static void capture_stdio_stop(struct stdiocap *cap); static char *visible_newlines(const char * const in); -static int test_default_channels(const char * const in, const char * const expected, size_t i, int usearg, void (*func)(const char *, ...)); +static int test_default_channels(const char * const in, const char * const expected, size_t i, int usearg, void (*func)(const char *, const char *, ...)); int diagnostic_test(char *testname) { @@ -76,7 +76,7 @@ static int err_test(void) for (i = 0; i < arrlen(in); ++i) { usearg = i < (arrlen(in) / 2) ? 0 : 1; - ret = test_default_channels(in[i], expected[i], i, usearg, rin_err); + ret = test_default_channels(in[i], expected[i], i, usearg, __rin_err); } return ret; @@ -93,7 +93,7 @@ static int warn_test(void) for (i = 0; i < arrlen(in); ++i) { usearg = i < (arrlen(in) / 2) ? 0 : 1; - ret = test_default_channels(in[i], expected[i], i, usearg, rin_warn); + ret = test_default_channels(in[i], expected[i], i, usearg, __rin_warn); } return ret; @@ -110,7 +110,7 @@ static int fixme_test(void) for (i = 0; i < arrlen(in); ++i) { usearg = i < (arrlen(in) / 2) ? 0 : 1; - ret = test_default_channels(in[i], expected[i], i, usearg, rin_fixme); + ret = test_default_channels(in[i], expected[i], i, usearg, __rin_fixme); } return ret; @@ -130,7 +130,7 @@ static int info_test(void) for (i = 0; i < arrlen(in); ++i) { usearg = i < (arrlen(in) / 2) ? 0 : 1; - ret = test_default_channels(in[i], expected[i], i, usearg, rin_info); + ret = test_default_channels(in[i], expected[i], i, usearg, __rin_info); } /* restore the default, kind of */ @@ -221,7 +221,7 @@ static char *visible_newlines(const char * const in) return ret; } -static int test_default_channels(const char * const in, const char * const expected, size_t i, int usearg, void (*func)(const char *, ...)) +static int test_default_channels(const char * const in, const char * const expected, size_t i, int usearg, void (*func)(const char *, const char *, ...)) { char buf[32] = {0}; struct stdiocap cap; @@ -239,9 +239,9 @@ static int test_default_channels(const char * const in, const char * const expec } if (usearg) { - func(in, i + 1); + func(NULL, in, i + 1); } else { - func(in); + func(NULL, in); } if (!(fgets(buf, sizeof(buf) < len ? sizeof(buf) : len, cap.pipe))) { |