Add minimalistic protected-headers support
[gpgol.git] / src / xmalloc.h
1 /* xmalloc.h - xmalloc prototypes
2  * Copyright (C) 2006 g10 Code GmbH
3  *
4  * This file is part of GpgOL.
5  * 
6  * GpgOL is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  * 
11  * GpgOL is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  * 
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #ifndef XMALLOC_H
21 #define XMALLOC_H
22
23 #ifdef __cplusplus
24 extern "C" {
25 #if 0
26 }
27 #endif
28 #endif
29
30 /*-- common.c --*/
31 #define xmalloc(VAR1) ({void *retval; \
32   retval = _xmalloc(VAR1); \
33   if ((opt.enable_debug & DBG_MEMORY)) \
34   { \
35     memdbg_alloc (retval); \
36     if ((opt.enable_debug & DBG_TRACE)) \
37       memset (retval, 'X', VAR1); \
38   } \
39 retval;})
40
41 #define xcalloc(VAR1, VAR2) ({void *retval; \
42   retval = _xcalloc(VAR1, VAR2); \
43   if ((opt.enable_debug & DBG_MEMORY)) \
44   { \
45     memdbg_alloc (retval);\
46   } \
47 retval;})
48
49 #define xrealloc(VAR1, VAR2) ({void *retval; \
50   retval = _xrealloc (VAR1, VAR2); \
51   if ((opt.enable_debug & DBG_MEMORY)) \
52   { \
53     memdbg_alloc (retval);\
54     memdbg_free ((void*)VAR1); \
55   } \
56 retval;})
57
58 #define xfree(VAR1) \
59 { \
60   if (VAR1 && (opt.enable_debug & DBG_MEMORY) && !memdbg_free (VAR1)) \
61     log_debug ("%s:%s:%i %p freed here", \
62                log_srcname (__FILE__), __func__, __LINE__, VAR1); \
63   _xfree (VAR1); \
64 }
65
66 #define xstrdup(VAR1) ({char *retval; \
67   retval = _xstrdup (VAR1); \
68   if ((opt.enable_debug & DBG_MEMORY)) \
69   { \
70     memdbg_alloc ((void *)retval);\
71   } \
72 retval;})
73
74 #define xwcsdup(VAR1) ({wchar_t *retval; \
75   retval = _xwcsdup (VAR1); \
76   if ((opt.enable_debug & DBG_MEMORY)) \
77   { \
78     memdbg_alloc ((void *)retval);\
79   } \
80 retval;})
81
82 void* _xmalloc (size_t n);
83 void* _xcalloc (size_t m, size_t n);
84 void *_xrealloc (void *a, size_t n);
85 char* _xstrdup (const char *s);
86 wchar_t * _xwcsdup (const wchar_t *s);
87 void  _xfree (void *p);
88 void out_of_core (void);
89
90 #ifdef __cplusplus
91 }
92 #endif
93 #endif /*XMALLOC_H*/