aboutsummaryrefslogtreecommitdiffstats
path: root/src/diagnostic
diff options
context:
space:
mode:
Diffstat (limited to 'src/diagnostic')
-rw-r--r--src/diagnostic/diagnostic.c36
-rw-r--r--src/diagnostic/diagnostic_private.h2
2 files changed, 22 insertions, 16 deletions
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 */