btrfs-progs: move message helpers implementation out of header
[platform/upstream/btrfs-progs.git] / messages.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public
4  * License v2 as published by the Free Software Foundation.
5  *
6  * This program is distributed in the hope that it will be useful,
7  * but WITHOUT ANY WARRANTY; without even the implied warranty of
8  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
9  * General Public License for more details.
10  *
11  * You should have received a copy of the GNU General Public
12  * License along with this program; if not, write to the
13  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
14  * Boston, MA 021110-1307, USA.
15  */
16
17 #ifndef __BTRFS_MESSAGES_H__
18 #define __BTRFS_MESSAGES_H__
19
20 #if DEBUG_VERBOSE_ERROR
21 #define PRINT_VERBOSE_ERROR     fprintf(stderr, "%s:%d:", __FILE__, __LINE__)
22 #else
23 #define PRINT_VERBOSE_ERROR
24 #endif
25
26 #if DEBUG_TRACE_ON_ERROR
27 #define PRINT_TRACE_ON_ERROR    print_trace()
28 #else
29 #define PRINT_TRACE_ON_ERROR
30 #endif
31
32 #if DEBUG_ABORT_ON_ERROR
33 #define DO_ABORT_ON_ERROR       abort()
34 #else
35 #define DO_ABORT_ON_ERROR
36 #endif
37
38 #define error(fmt, ...)                                                 \
39         do {                                                            \
40                 PRINT_TRACE_ON_ERROR;                                   \
41                 PRINT_VERBOSE_ERROR;                                    \
42                 __error((fmt), ##__VA_ARGS__);                          \
43                 DO_ABORT_ON_ERROR;                                      \
44         } while (0)
45
46 #define error_on(cond, fmt, ...)                                        \
47         do {                                                            \
48                 if ((cond))                                             \
49                         PRINT_TRACE_ON_ERROR;                           \
50                 if ((cond))                                             \
51                         PRINT_VERBOSE_ERROR;                            \
52                 __error_on((cond), (fmt), ##__VA_ARGS__);               \
53                 if ((cond))                                             \
54                         DO_ABORT_ON_ERROR;                              \
55         } while (0)
56
57 #define warning(fmt, ...)                                               \
58         do {                                                            \
59                 PRINT_TRACE_ON_ERROR;                                   \
60                 PRINT_VERBOSE_ERROR;                                    \
61                 __warning((fmt), ##__VA_ARGS__);                        \
62         } while (0)
63
64 #define warning_on(cond, fmt, ...)                                      \
65         do {                                                            \
66                 if ((cond))                                             \
67                         PRINT_TRACE_ON_ERROR;                           \
68                 if ((cond))                                             \
69                         PRINT_VERBOSE_ERROR;                            \
70                 __warning_on((cond), (fmt), ##__VA_ARGS__);             \
71         } while (0)
72
73 __attribute__ ((format (printf, 1, 2)))
74 void __warning(const char *fmt, ...);
75
76 __attribute__ ((format (printf, 1, 2)))
77 void __error(const char *fmt, ...);
78
79 __attribute__ ((format (printf, 2, 3)))
80 int __warning_on(int condition, const char *fmt, ...);
81
82 __attribute__ ((format (printf, 2, 3)))
83 int __error_on(int condition, const char *fmt, ...);
84
85 #endif