aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/rin/definitions.h2
-rw-r--r--include/rin/diagnostic.h17
-rw-r--r--src/diagnostic/diagnostic.c22
-rw-r--r--src/diagnostic/diagnostic_private.h2
-rw-r--r--test/diagnostic.c16
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))) {