agent: Fix segv running in --server mode
[gnupg.git] / common / logging.h
1 /* logging.h
2  * Copyright (C) 1999, 2000, 2001, 2004, 2006,
3  *               2010 Free Software Foundation, Inc.
4  *
5  * This file is part of GnuPG.
6  *
7  * GnuPG is free software; you can redistribute and/or modify this
8  * part of GnuPG under the terms of either
9  *
10  *   - the GNU Lesser General Public License as published by the Free
11  *     Software Foundation; either version 3 of the License, or (at
12  *     your option) any later version.
13  *
14  * or
15  *
16  *   - the GNU General Public License as published by the Free
17  *     Software Foundation; either version 2 of the License, or (at
18  *     your option) any later version.
19  *
20  * or both in parallel, as here.
21  *
22  * GnuPG is distributed in the hope that it will be useful, but
23  * WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * General Public License for more details.
26  *
27  * You should have received a copies of the GNU General Public License
28  * and the GNU Lesser General Public License along with this program;
29  * if not, see <https://www.gnu.org/licenses/>.
30  */
31
32 #ifndef GNUPG_COMMON_LOGGING_H
33 #define GNUPG_COMMON_LOGGING_H
34
35 #include <stdio.h>
36 #include <stdarg.h>
37 #include <gpg-error.h>
38 #include "mischelp.h"
39 #include "w32help.h"
40
41 /* We use the libgpg-error provided log functions.  but we need one
42  * more function:  */
43 #ifdef GPGRT_HAVE_MACRO_FUNCTION
44 #  define BUG() bug_at ( __FILE__, __LINE__, __FUNCTION__)
45 static inline void bug_at (const char *file, int line, const char *func)
46                            GPGRT_ATTR_NORETURN;
47 static inline void
48 bug_at (const char *file, int line, const char *func)
49 {
50   gpgrt_log (GPGRT_LOGLVL_BUG, "there is a bug at %s:%d:%s\n",
51              file, line, func);
52   abort ();
53 }
54 #else
55 #  define BUG() bug_at ( __FILE__, __LINE__)
56 static inline void bug_at (const char *file, int line)
57                            GPGRT_ATTR_NORETURN;
58 static inline void
59 bug_at (const char *file, int line)
60 {
61   gpgrt_log (GPGRT_LOGLVL_BUG, "there is a bug at %s:%d\n", file, line);
62   abort ();
63 }
64 #endif /*!GPGRT_HAVE_MACRO_FUNCTION*/
65
66
67
68 /* Some handy assertion macros which don't abort.  */
69
70 #define return_if_fail(expr) do {                        \
71     if (!(expr)) {                                       \
72         log_debug ("%s:%d: assertion '%s' failed\n",     \
73                    __FILE__, __LINE__, #expr );          \
74         return;                                          \
75     } } while (0)
76 #define return_null_if_fail(expr) do {                   \
77     if (!(expr)) {                                       \
78         log_debug ("%s:%d: assertion '%s' failed\n",     \
79                    __FILE__, __LINE__, #expr );          \
80         return NULL;                                     \
81     } } while (0)
82 #define return_val_if_fail(expr,val) do {                \
83     if (!(expr)) {                                       \
84         log_debug ("%s:%d: assertion '%s' failed\n",     \
85                    __FILE__, __LINE__, #expr );          \
86         return (val);                                    \
87     } } while (0)
88 #define never_reached() do {                             \
89     log_debug ("%s:%d: oops - should never get here\n",  \
90                __FILE__, __LINE__ );                     \
91     } while (0)
92
93
94 #endif /*GNUPG_COMMON_LOGGING_H*/