ROOT  6.05/03
Reference Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
gmessages.h
Go to the documentation of this file.
1 /* GLIB - Library of useful routines for C programming
2  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19 
20 /*
21  * Modified by the GLib Team and others 1997-2000. See the AUTHORS
22  * file for a list of people on the GLib Team. See the ChangeLog
23  * files for a list of changes. These files are distributed with
24  * GLib at ftp://ftp.gtk.org/pub/gtk/.
25  */
26 
27 #ifndef __G_MESSAGES_H__
28 #define __G_MESSAGES_H__
29 
30 #include <stdarg.h>
31 #include <glib/gtypes.h>
32 
34 
35 /* calculate a string size, guarranteed to fit format + args.
36  */
38  va_list args);
39 
40 /* Log level shift offset for user defined
41  * log levels (0-7 are used by GLib).
42  */
43 #define G_LOG_LEVEL_USER_SHIFT (8)
44 
45 /* Glib log levels and flags.
46  */
47 typedef enum
48 {
49  /* log flags */
51  G_LOG_FLAG_FATAL = 1 << 1,
52 
53  /* GLib log levels */
54  G_LOG_LEVEL_ERROR = 1 << 2, /* always fatal */
58  G_LOG_LEVEL_INFO = 1 << 6,
60 
63 
64 /* GLib log levels that are considered fatal by default */
65 #define G_LOG_FATAL_MASK (G_LOG_FLAG_RECURSION | G_LOG_LEVEL_ERROR)
66 
67 typedef void (*GLogFunc) (const gchar *log_domain,
68  GLogLevelFlags log_level,
69  const gchar *message,
70  gpointer user_data);
71 
72 /* Logging mechanism
73  */
75 guint g_log_set_handler (const gchar *log_domain,
76  GLogLevelFlags log_levels,
77  GLogFunc log_func,
78  gpointer user_data);
79 void g_log_remove_handler (const gchar *log_domain,
80  guint handler_id);
81 void g_log_default_handler (const gchar *log_domain,
82  GLogLevelFlags log_level,
83  const gchar *message,
84  gpointer unused_data);
85 void g_log (const gchar *log_domain,
86  GLogLevelFlags log_level,
87  const gchar *format,
88  ...) G_GNUC_PRINTF (3, 4);
89 void g_logv (const gchar *log_domain,
90  GLogLevelFlags log_level,
91  const gchar *format,
92  va_list args);
93 GLogLevelFlags g_log_set_fatal_mask (const gchar *log_domain,
94  GLogLevelFlags fatal_mask);
96 
97 #ifndef G_LOG_DOMAIN
98 #define G_LOG_DOMAIN ((gchar*) 0)
99 #endif /* G_LOG_DOMAIN */
100 #ifdef G_HAVE_ISO_VARARGS
101 #define g_error(...) g_log (G_LOG_DOMAIN, \
102  G_LOG_LEVEL_ERROR, \
103  __VA_ARGS__)
104 #define g_message(...) g_log (G_LOG_DOMAIN, \
105  G_LOG_LEVEL_MESSAGE, \
106  __VA_ARGS__)
107 #define g_critical(...) g_log (G_LOG_DOMAIN, \
108  G_LOG_LEVEL_CRITICAL, \
109  __VA_ARGS__)
110 #define g_warning(...) g_log (G_LOG_DOMAIN, \
111  G_LOG_LEVEL_WARNING, \
112  __VA_ARGS__)
113 #elif defined(G_HAVE_GNUC_VARARGS)
114 #define g_error(format...) g_log (G_LOG_DOMAIN, \
115  G_LOG_LEVEL_ERROR, \
116  format)
117 #define g_message(format...) g_log (G_LOG_DOMAIN, \
118  G_LOG_LEVEL_MESSAGE, \
119  format)
120 #define g_critical(format...) g_log (G_LOG_DOMAIN, \
121  G_LOG_LEVEL_CRITICAL, \
122  format)
123 #define g_warning(format...) g_log (G_LOG_DOMAIN, \
124  G_LOG_LEVEL_WARNING, \
125  format)
126 #else /* no varargs macros */
127 static void
128 g_error (const gchar *format,
129  ...)
130 {
131  va_list args;
132  va_start (args, format);
133  g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_ERROR, format, args);
134  va_end (args);
135 }
136 static void
137 g_message (const gchar *format,
138  ...)
139 {
140  va_list args;
141  va_start (args, format);
142  g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, format, args);
143  va_end (args);
144 }
145 static void
146 g_critical (const gchar *format,
147  ...)
148 {
149  va_list args;
150  va_start (args, format);
151  g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL, format, args);
152  va_end (args);
153 }
154 static void
155 g_warning (const gchar *format,
156  ...)
157 {
158  va_list args;
159  va_start (args, format);
160  g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, format, args);
161  va_end (args);
162 }
163 #endif /* !__GNUC__ */
164 
165 typedef void (*GPrintFunc) (const gchar *string);
166 void g_print (const gchar *format,
167  ...) G_GNUC_PRINTF (1, 2);
169 void g_printerr (const gchar *format,
170  ...) G_GNUC_PRINTF (1, 2);
172 
173 
174 /* Provide macros for error handling. The "assert" macros will
175  * exit on failure. The "return" macros will exit the current
176  * function. Two different definitions are given for the macros
177  * if G_DISABLE_ASSERT is not defined, in order to support gcc's
178  * __PRETTY_FUNCTION__ capability.
179  */
180 
181 #ifdef G_DISABLE_ASSERT
182 
183 #define g_assert(expr) G_STMT_START{ }G_STMT_END
184 #define g_assert_not_reached() G_STMT_START{ }G_STMT_END
185 
186 #else /* !G_DISABLE_ASSERT */
187 
188 #ifdef __GNUC__
189 
190 #define g_assert(expr) G_STMT_START{ \
191  if (!(expr)) \
192  g_log (G_LOG_DOMAIN, \
193  G_LOG_LEVEL_ERROR, \
194  "file %s: line %d (%s): assertion failed: (%s)", \
195  __FILE__, \
196  __LINE__, \
197  __PRETTY_FUNCTION__, \
198  #expr); }G_STMT_END
199 
200 #define g_assert_not_reached() G_STMT_START{ \
201  g_log (G_LOG_DOMAIN, \
202  G_LOG_LEVEL_ERROR, \
203  "file %s: line %d (%s): should not be reached", \
204  __FILE__, \
205  __LINE__, \
206  __PRETTY_FUNCTION__); }G_STMT_END
207 
208 #else /* !__GNUC__ */
209 
210 #define g_assert(expr) G_STMT_START{ \
211  if (!(expr)) \
212  g_log (G_LOG_DOMAIN, \
213  G_LOG_LEVEL_ERROR, \
214  "file %s: line %d: assertion failed: (%s)", \
215  __FILE__, \
216  __LINE__, \
217  #expr); }G_STMT_END
218 
219 #define g_assert_not_reached() G_STMT_START{ \
220  g_log (G_LOG_DOMAIN, \
221  G_LOG_LEVEL_ERROR, \
222  "file %s: line %d: should not be reached", \
223  __FILE__, \
224  __LINE__); }G_STMT_END
225 
226 #endif /* __GNUC__ */
227 
228 #endif /* !G_DISABLE_ASSERT */
229 
230 
231 #ifdef G_DISABLE_CHECKS
232 
233 #define g_return_if_fail(expr) G_STMT_START{ }G_STMT_END
234 #define g_return_val_if_fail(expr,val) G_STMT_START{ }G_STMT_END
235 #define g_return_if_reached() G_STMT_START{ return; }G_STMT_END
236 #define g_return_val_if_reached(val) G_STMT_START{ return (val); }G_STMT_END
237 
238 #else /* !G_DISABLE_CHECKS */
239 
240 #ifdef __GNUC__
241 
242 #define g_return_if_fail(expr) G_STMT_START{ \
243  if (!(expr)) \
244  { \
245  g_log (G_LOG_DOMAIN, \
246  G_LOG_LEVEL_CRITICAL, \
247  "file %s: line %d (%s): assertion `%s' failed", \
248  __FILE__, \
249  __LINE__, \
250  __PRETTY_FUNCTION__, \
251  #expr); \
252  return; \
253  }; }G_STMT_END
254 
255 #define g_return_val_if_fail(expr,val) G_STMT_START{ \
256  if (!(expr)) \
257  { \
258  g_log (G_LOG_DOMAIN, \
259  G_LOG_LEVEL_CRITICAL, \
260  "file %s: line %d (%s): assertion `%s' failed", \
261  __FILE__, \
262  __LINE__, \
263  __PRETTY_FUNCTION__, \
264  #expr); \
265  return (val); \
266  }; }G_STMT_END
267 
268 #define g_return_if_reached() G_STMT_START{ \
269  g_log (G_LOG_DOMAIN, \
270  G_LOG_LEVEL_CRITICAL, \
271  "file %s: line %d (%s): should not be reached", \
272  __FILE__, \
273  __LINE__, \
274  __PRETTY_FUNCTION__); \
275  return; }G_STMT_END
276 
277 #define g_return_val_if_reached(val) G_STMT_START{ \
278  g_log (G_LOG_DOMAIN, \
279  G_LOG_LEVEL_CRITICAL, \
280  "file %s: line %d (%s): should not be reached", \
281  __FILE__, \
282  __LINE__, \
283  __PRETTY_FUNCTION__); \
284  return (val); }G_STMT_END
285 
286 #else /* !__GNUC__ */
287 
288 #define g_return_if_fail(expr) G_STMT_START{ \
289  if (!(expr)) \
290  { \
291  g_log (G_LOG_DOMAIN, \
292  G_LOG_LEVEL_CRITICAL, \
293  "file %s: line %d: assertion `%s' failed", \
294  __FILE__, \
295  __LINE__, \
296  #expr); \
297  return; \
298  }; }G_STMT_END
299 
300 #define g_return_val_if_fail(expr, val) G_STMT_START{ \
301  if (!(expr)) \
302  { \
303  g_log (G_LOG_DOMAIN, \
304  G_LOG_LEVEL_CRITICAL, \
305  "file %s: line %d: assertion `%s' failed", \
306  __FILE__, \
307  __LINE__, \
308  #expr); \
309  return (val); \
310  }; }G_STMT_END
311 
312 #define g_return_if_reached() G_STMT_START{ \
313  g_log (G_LOG_DOMAIN, \
314  G_LOG_LEVEL_CRITICAL, \
315  "file %s: line %d: should not be reached", \
316  __FILE__, \
317  __LINE__); \
318  return; }G_STMT_END
319 
320 #define g_return_val_if_reached(val) G_STMT_START{ \
321  g_log (G_LOG_DOMAIN, \
322  G_LOG_LEVEL_CRITICAL, \
323  "file %s: line %d: should not be reached", \
324  __FILE__, \
325  __LINE__); \
326  return (val); }G_STMT_END
327 
328 #endif /* !__GNUC__ */
329 
330 #endif /* !G_DISABLE_CHECKS */
331 
333 
334 #endif /* __G_MESSAGES_H__ */
335 
void g_log_default_handler(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer unused_data)
Definition: gmessages.c:573
unsigned int guint
Definition: g_types.h:51
void void g_logv(const gchar *log_domain, GLogLevelFlags log_level, const gchar *format, va_list args)
Definition: gmessages.c:471
void g_printerr(const gchar *format,...) G_GNUC_PRINTF(1
void(* GPrintFunc)(const gchar *string)
Definition: gmessages.h:165
#define G_END_DECLS
Definition: gmacros.h:109
G_BEGIN_DECLS typedef char gchar
Definition: g_types.h:41
static void g_critical(const gchar *format,...)
Definition: gmessages.h:146
guint32 gsize
static void g_message(const gchar *format,...)
Definition: gmessages.h:137
#define GLIB_VAR
Definition: gtypes.h:341
void g_log(const gchar *log_domain, GLogLevelFlags log_level, const gchar *format,...) G_GNUC_PRINTF(3
GLogLevelFlags g_log_set_fatal_mask(const gchar *log_domain, GLogLevelFlags fatal_mask)
Definition: gmessages.c:373
#define G_BEGIN_DECLS
Definition: gmacros.h:108
void * gpointer
Definition: g_types.h:67
static void g_error(const gchar *format,...)
Definition: gmessages.h:128
GLogLevelFlags
Definition: gmessages.h:47
GLIB_VAR const gchar * g_log_domain_glib
Definition: gmessages.h:74
void GPrintFunc g_set_print_handler(GPrintFunc func)
Definition: gmessages.c:775
void GPrintFunc g_set_printerr_handler(GPrintFunc func)
Definition: gmessages.c:817
void(* GLogFunc)(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data)
Definition: gmessages.h:67
GLogLevelFlags g_log_set_always_fatal(GLogLevelFlags fatal_mask)
Definition: gmessages.c:353
#define G_LOG_DOMAIN
Definition: gmessages.h:98
guint g_log_set_handler(const gchar *log_domain, GLogLevelFlags log_levels, GLogFunc log_func, gpointer user_data)
Definition: gmessages.c:399
void g_print(const gchar *format,...) G_GNUC_PRINTF(1
typedef void((*Func_t)())
static void g_warning(const gchar *format,...)
Definition: gmessages.h:155
void g_log_remove_handler(const gchar *log_domain, guint handler_id)
Definition: gmessages.c:432
string message
Definition: ROOT.py:94
G_BEGIN_DECLS gsize g_printf_string_upper_bound(const gchar *format, va_list args)
Definition: gmessages.c:1174