btrfs-progs: Introduce warning and error for common use
authorZhao Lei <zhaolei@cn.fujitsu.com>
Mon, 28 Sep 2015 13:58:13 +0000 (21:58 +0800)
committerDavid Sterba <dsterba@suse.com>
Wed, 21 Oct 2015 12:29:26 +0000 (14:29 +0200)
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@cn.fujitsu.com>
Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
[print newline after the message]
Signed-off-by: David Sterba <dsterba@suse.com>
utils.h

diff --git a/utils.h b/utils.h
index 192f3d1..044ea15 100644 (file)
--- 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)
@@ -270,4 +271,58 @@ const char *get_argv0_buf(void);
 
 unsigned int get_unit_mode_from_arg(int *argc, char *argv[], int df_mode);
 
+static inline void warning(const char *fmt, ...)
+{
+       va_list args;
+
+       fputs("WARNING: ", stderr);
+       va_start(args, fmt);
+       vfprintf(stderr, fmt, args);
+       va_end(args);
+       fputc('\n', stderr);
+}
+
+static inline void error(const char *fmt, ...)
+{
+       va_list args;
+
+       fputs("ERROR: ", stderr);
+       va_start(args, fmt);
+       vfprintf(stderr, fmt, args);
+       va_end(args);
+       fputc('\n', stderr);
+}
+
+static inline int warning_on(int condition, const char *fmt, ...)
+{
+       va_list args;
+
+       if (!condition)
+               return 0;
+
+       fputs("WARNING: ", stderr);
+       va_start(args, fmt);
+       vfprintf(stderr, fmt, args);
+       va_end(args);
+       fputc('\n', stderr);
+
+       return 1;
+}
+
+static inline int error_on(int condition, const char *fmt, ...)
+{
+       va_list args;
+
+       if (!condition)
+               return 0;
+
+       fputs("ERROR: ", stderr);
+       va_start(args, fmt);
+       vfprintf(stderr, fmt, args);
+       va_end(args);
+       fputc('\n', stderr);
+
+       return 1;
+}
+
 #endif