Current code use fprintf(stderr, "...") to output warnning and
error information.
The error message have different style, as:
# grep fprintf *.c
fprintf(stderr, "Open ctree failed\n");
fprintf(stderr, "%s: open ctree failed\n", __func__);
fprintf(stderr, "ERROR: cannot open ctree\n");
...
And sometimes, we forgot add tailed '\n', or use printf instead,
as in current code:
printf("warning, device %llu is missing\n",
This patch introduce warning() and error() as common function,
to make:
1: Each warning and error information have same format
2: Easy to search/change all error message
3: Easy to modify function's internal for debug or other requirement,
for example:
print function/linenumber in error()
dumpstack in error()
add some trace for some style of message
add support for -v, -vv, ...
support for locales
custom output functions
support some special device/tty
Signed-off-by: Qu Wenruo <quwenruo@xxxxxxxxxxxxxx>
Signed-off-by: Zhao Lei <zhaolei@xxxxxxxxxxxxxx>
---
utils.h | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/utils.h b/utils.h
index dce0a47..c63e372 100644
--- a/utils.h
+++ b/utils.h
@@ -22,6 +22,7 @@
#include <sys/stat.h>
#include "ctree.h"
#include <dirent.h>
+#include <stdarg.h>
#define BTRFS_MKFS_SYSTEM_GROUP_SIZE (4 * 1024 * 1024)
#define BTRFS_MKFS_SMALL_VOLUME_SIZE (1024 * 1024 * 1024)
@@ -269,4 +270,58 @@ const char *get_argv0_buf(void);
unsigned int get_unit_mode_from_arg(int *argc, char *argv[], int df_mode);
+static inline void __veprintf(const char *prefix, const char *format,
+ va_list ap)
+{
+ if (prefix)
+ fprintf(stderr, "%s", prefix);
+ vfprintf(stderr, format, ap);
+}
+
+static inline void warning(const char *fmt, ...)
+{
+ va_list args;
+
+ va_start(args, fmt);
+ __veprintf("WARNING: ", fmt, args);
+ va_end(args);
+}
+
+static inline void error(const char *fmt, ...)
+{
+ va_list args;
+
+ va_start(args, fmt);
+ __veprintf("ERROR: ", fmt, args);
+ va_end(args);
+}
+
+static inline int warning_on(int condition, const char *fmt, ...)
+{
+ if (!condition)
+ return 0;
+
+ va_list args;
+
+ va_start(args, fmt);
+ __veprintf("WARNING: ", fmt, args);
+ va_end(args);
+
+ return 1;
+}
+
+static inline int error_on(int condition, const char *fmt, ...)
+{
+ if (!condition)
+ return 0;
+
+ va_list args;
+
+ va_start(args, fmt);
+ __veprintf("ERROR: ", fmt, args);
+ va_end(args);
+
+ return 1;
+}
+
#endif
--
1.8.5.1
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html