summaryrefslogtreecommitdiffstats
path: root/diag.c
diff options
context:
space:
mode:
Diffstat (limited to 'diag.c')
-rw-r--r--diag.c83
1 files changed, 75 insertions, 8 deletions
diff --git a/diag.c b/diag.c
index f43ed2e..fb1a295 100644
--- a/diag.c
+++ b/diag.c
@@ -18,6 +18,7 @@
#include "cmdline.h"
#include "color.h"
#include "util.h"
+#include <assert.h>
#include <errno.h>
#include <stdarg.h>
#include <stdlib.h>
@@ -30,11 +31,20 @@ void bfs_error(const struct cmdline *cmdline, const char *format, ...) {
va_end(args);
}
-void bfs_warning(const struct cmdline *cmdline, const char *format, ...) {
+bool bfs_warning(const struct cmdline *cmdline, const char *format, ...) {
va_list args;
va_start(args, format);
- bfs_vwarning(cmdline, format, args);
+ bool ret = bfs_vwarning(cmdline, format, args);
va_end(args);
+ return ret;
+}
+
+bool bfs_debug(const struct cmdline *cmdline, enum debug_flags flag, const char *format, ...) {
+ va_list args;
+ va_start(args, format);
+ bool ret = bfs_vdebug(cmdline, flag, format, args);
+ va_end(args);
+ return ret;
}
void bfs_verror(const struct cmdline *cmdline, const char *format, va_list args) {
@@ -46,14 +56,27 @@ void bfs_verror(const struct cmdline *cmdline, const char *format, va_list args)
cvfprintf(cmdline->cerr, format, args);
}
-void bfs_vwarning(const struct cmdline *cmdline, const char *format, va_list args) {
- if (cmdline->warn) {
- int error = errno;
+bool bfs_vwarning(const struct cmdline *cmdline, const char *format, va_list args) {
+ int error = errno;
+
+ if (bfs_warning_prefix(cmdline)) {
+ errno = error;
+ cvfprintf(cmdline->cerr, format, args);
+ return true;
+ } else {
+ return false;
+ }
+}
- bfs_warning_prefix(cmdline);
+bool bfs_vdebug(const struct cmdline *cmdline, enum debug_flags flag, const char *format, va_list args) {
+ int error = errno;
+ if (bfs_debug_prefix(cmdline, flag)) {
errno = error;
cvfprintf(cmdline->cerr, format, args);
+ return true;
+ } else {
+ return false;
}
}
@@ -61,6 +84,50 @@ void bfs_error_prefix(const struct cmdline *cmdline) {
cfprintf(cmdline->cerr, "${bld}%s:${rs} ${er}error:${rs} ", xbasename(cmdline->argv[0]));
}
-void bfs_warning_prefix(const struct cmdline *cmdline) {
- cfprintf(cmdline->cerr, "${bld}%s:${rs} ${wr}warning:${rs} ", xbasename(cmdline->argv[0]));
+bool bfs_warning_prefix(const struct cmdline *cmdline) {
+ if (cmdline->warn) {
+ cfprintf(cmdline->cerr, "${bld}%s:${rs} ${wr}warning:${rs} ", xbasename(cmdline->argv[0]));
+ return true;
+ } else {
+ return false;
+ }
+}
+
+bool bfs_debug_prefix(const struct cmdline *cmdline, enum debug_flags flag) {
+ if (!(cmdline->debug & flag)) {
+ return false;
+ }
+
+ const char *str;
+
+ switch (flag) {
+ case DEBUG_COST:
+ str = "cost";
+ break;
+ case DEBUG_EXEC:
+ str = "exec";
+ break;
+ case DEBUG_OPT:
+ str = "opt";
+ break;
+ case DEBUG_RATES:
+ str = "rates";
+ break;
+ case DEBUG_SEARCH:
+ str = "search";
+ break;
+ case DEBUG_STAT:
+ str = "stat";
+ break;
+ case DEBUG_TREE:
+ str = "tree";
+ break;
+ default:
+ assert(false);
+ str = "???";
+ break;
+ }
+
+ cfprintf(cmdline->cerr, "${bld}%s:${rs} ${cyn}-D %s${rs}: ", xbasename(cmdline->argv[0]), str);
+ return true;
}