aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/diagnostic/diagnostic.c44
1 files changed, 43 insertions, 1 deletions
diff --git a/src/diagnostic/diagnostic.c b/src/diagnostic/diagnostic.c
index 3ec7855..4378988 100644
--- a/src/diagnostic/diagnostic.c
+++ b/src/diagnostic/diagnostic.c
@@ -40,7 +40,11 @@ static struct iostate {
char *warn_format;
char *fixme_format;
char *info_format;
-} state = {{0, 0}, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
+ unsigned int err_knob : 1;
+ unsigned int warn_knob : 1;
+ unsigned int fixme_knob : 1;
+ unsigned int info_knob : 1;
+} state = {{0, 0}, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 1, 1, 1};
void rin_diag_cleanup(void)
{
@@ -141,10 +145,36 @@ int rin_diag_set_outstream(const enum rin_diag_outstream channel, FILE * const s
return 0;
}
+int rin_diag_channel_set_enabled_state(const enum rin_diag_outstream channel, const unsigned int enable)
+{
+ switch (channel) {
+ case rin_diag_err:
+ state.err_knob = enable;
+ break;
+ case rin_diag_warn:
+ state.warn_knob = enable;
+ break;
+ case rin_diag_fixme:
+ state.fixme_knob = enable;
+ break;
+ case rin_diag_info:
+ state.info_knob = enable;
+ break;
+ default:
+ return EINVAL;
+ }
+
+ return 0;
+}
+
void __rin_err(const char * const func_name, int line_num, const char * const file_name, const char *format, ...)
{
va_list args;
+ if (!state.err_knob) {
+ return;
+ }
+
va_start(args, format);
__rin_msg(state.err ? state.err : stderr, "error", func_name, line_num,
file_name, state.err_format ? state.err_format : default_format,
@@ -156,6 +186,10 @@ void __rin_warn(const char * const func_name, int line_num, const char * const f
{
va_list args;
+ if (!state.warn_knob) {
+ return;
+ }
+
va_start(args, format);
__rin_msg(state.warn ? state.warn : stderr, "warning", func_name, line_num,
file_name, state.warn_format ? state.warn_format : default_format,
@@ -167,6 +201,10 @@ void __rin_fixme(const char * const func_name, int line_num, const char * const
{
va_list args;
+ if (!state.fixme_knob) {
+ return;
+ }
+
va_start(args, format);
__rin_msg(state.fixme ? state.fixme : stderr, "fixme", func_name, line_num,
file_name, state.fixme_format ? state.fixme_format : default_format,
@@ -178,6 +216,10 @@ void __rin_info(const char * const func_name, int line_num, const char * const f
{
va_list args;
+ if (!state.info_knob) {
+ return;
+ }
+
va_start(args, format);
__rin_msg(state.info ? state.info : stdout, "info", func_name, line_num,
file_name, state.info_format ? state.info_format : default_format,