From a5336d82eaee1ea72053a7d24c841f631fc48892 Mon Sep 17 00:00:00 2001 From: Gediminas Jakutis Date: Tue, 9 Feb 2021 05:12:49 +0200 Subject: diagnostic: now with line numbers and filenames! Signed-off-by: Gediminas Jakutis --- src/diagnostic/diagnostic.c | 36 +++++++++++++++++++++--------------- src/diagnostic/diagnostic_private.h | 2 +- 2 files changed, 22 insertions(+), 16 deletions(-) (limited to 'src/diagnostic') diff --git a/src/diagnostic/diagnostic.c b/src/diagnostic/diagnostic.c index 1a70d07..2ce8f50 100644 --- a/src/diagnostic/diagnostic.c +++ b/src/diagnostic/diagnostic.c @@ -27,8 +27,8 @@ #include "rin/time.h" #include "rin/definitions.h" -static const char default_format[] = "C:F:mn"; -static const char valid_format[] = "CFtTn:m"; +static const char default_format[] = "C:f:F:l:mn"; +static const char valid_format[] = "CFtTn:mfl"; static struct iostate { struct timespec start; @@ -141,47 +141,47 @@ int rin_diag_set_outstream(const enum rin_diag_outstream channel, FILE * const s return 0; } -void __rin_err(const char* const func_name, const char *format, ...) +void __rin_err(const char * const func_name, int line_num, const char * const file_name, const char *format, ...) { va_list args; va_start(args, format); - __rin_msg(state.err ? state.err : stderr, "error", func_name, - state.err_format ? state.err_format : default_format, + __rin_msg(state.err ? state.err : stderr, "error", func_name, line_num, + file_name, state.err_format ? state.err_format : default_format, format, args); } -void __rin_warn(const char* const func_name, const char *format, ...) +void __rin_warn(const char * const func_name, int line_num, const char * const file_name, const char *format, ...) { va_list args; va_start(args, format); - __rin_msg(state.warn ? state.warn : stderr, "warning", func_name, - state.warn_format ? state.warn_format : default_format, + __rin_msg(state.warn ? state.warn : stderr, "warning", func_name, line_num, + file_name, state.warn_format ? state.warn_format : default_format, format, args); } -void __rin_fixme(const char* const func_name, const char *format, ...) +void __rin_fixme(const char * const func_name, int line_num, const char * const file_name, const char *format, ...) { va_list args; va_start(args, format); - __rin_msg(state.fixme ? state.fixme : stderr, "fixme", func_name, - state.fixme_format ? state.fixme_format : default_format, + __rin_msg(state.fixme ? state.fixme : stderr, "fixme", func_name, line_num, + file_name, state.fixme_format ? state.fixme_format : default_format, format, args); } -void __rin_info(const char* const func_name, const char *format, ...) +void __rin_info(const char * const func_name, int line_num, const char * const file_name, const char *format, ...) { va_list args; va_start(args, format); - __rin_msg(state.info ? state.info : stdout, "info", func_name, - state.info_format ? state.info_format : default_format, + __rin_msg(state.info ? state.info : stdout, "info", func_name, line_num, + file_name, state.info_format ? state.info_format : default_format, format, args); } -static void __rin_msg(FILE * const stream, const char *prefix, const char* const func_name, const char *rin_format, const char *format, va_list args) +static void __rin_msg(FILE * const stream, const char *prefix, const char *func_name, int line_num, const char * const file_name, const char *rin_format, const char *format, va_list args) { struct timespec t; size_t i; @@ -222,6 +222,12 @@ static void __rin_msg(FILE * const stream, const char *prefix, const char* const case 'm': vfprintf(stream, format, args); break; + case 'f': + fprintf(stream, "%s", file_name); + break; + case 'l': + fprintf(stream, "%i", line_num); + break; } } } diff --git a/src/diagnostic/diagnostic_private.h b/src/diagnostic/diagnostic_private.h index 04778b5..9fb43ab 100644 --- a/src/diagnostic/diagnostic_private.h +++ b/src/diagnostic/diagnostic_private.h @@ -28,7 +28,7 @@ #define RIN_NEED_GETTID #include "rin/compat.h" -static void __rin_msg(FILE *stream, const char *prefix, const char *func_name, const char *rin_format, const char *format, va_list args); +static void __rin_msg(FILE * const stream, const char *prefix, const char *func_name, int line_num, const char * const file_name, const char *rin_format, const char *format, va_list args); static void rin_diag_cleanup(void); #endif /* LIBRIN_DIAGNOSTIC_PRIVATE_INCLUDED */ -- cgit v1.2.3