Add minimalistic protected-headers support
[gpgol.git] / src / memdbg.h
1 #ifndef MEMDBG_H
2 #define MEMDBG_H
3
4 /* @file memdbg.h
5  * @brief Memory debugging helpers
6  *
7  * Copyright (C) 2018 Intevation GmbH
8  *
9  * This file is part of GpgOL.
10  *
11  * GpgOL is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public
13  * License as published by the Free Software Foundation; either
14  * version 2.1 of the License, or (at your option) any later version.
15  *
16  * GpgOL is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * along with this program; if not, see <http://www.gnu.org/licenses/>.
23  */
24
25 #ifdef __cplusplus
26 extern "C" {
27 #if 0
28 }
29 #endif
30 #endif
31
32 #define memdbg_addRef(X) \
33 { \
34   if (X) \
35     { \
36       log_oom ("%s:%s:%i AddRef on %p", \
37                      SRCNAME, __func__, __LINE__, X); \
38       _memdbg_addRef (X, __func__); \
39     } \
40 }
41
42 void _memdbg_addRef (void *obj, const char *nameSuggestion);
43 void memdbg_released (void *obj);
44
45 void memdbg_ctor (const char *objName);
46 void memdbg_dtor (const char *objName);
47
48 void _memdbg_alloc (void *ptr, const char *srcname, const char *func, int line);
49 #define memdbg_alloc(X) \
50     _memdbg_alloc ((void *)X, log_srcname (__FILE__), __func__, __LINE__);
51 int memdbg_free (void *ptr);
52
53 void memdbg_dump(void);
54
55 #ifdef __cplusplus
56 }
57 #endif
58
59 #endif //MEMDBG_H