00001
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #pragma once
00036 #ifndef OSCAP_ALLOC_H
00037 #define OSCAP_ALLOC_H
00038
00039 #include <stdlib.h>
00040
00041 #undef __P
00042 #define __P __attribute__ ((unused)) static
00043
00044 #if defined(NDEBUG)
00045 void *__oscap_alloc(size_t s);
00046 __P void *oscap_alloc(size_t s)
00047 {
00048 return __oscap_alloc(s);
00049 }
00050
00051 void *__oscap_calloc(size_t n, size_t s);
00052 __P void *oscap_calloc(size_t n, size_t s)
00053 {
00054 return __oscap_calloc(n, s);
00055 }
00056
00057 void *__oscap_realloc(void *p, size_t s);
00058 __P void *oscap_realloc(void *p, size_t s)
00059 {
00060 return __oscap_realloc(p, s);
00061 }
00062
00063 void *__oscap_reallocf(void *p, size_t s);
00064 __P void *oscap_reallocf(void *p, size_t s)
00065 {
00066 return __oscap_reallocf(p, s);
00067 }
00068
00069 void __oscap_free(void *p);
00070 __P void oscap_free(void *p)
00071 {
00072 __oscap_free(p);
00073 }
00074
00075 # define oscap_alloc(s) __oscap_alloc (s)
00076 # define oscap_calloc(n, s) __oscap_calloc (n, s);
00077 # define oscap_realloc(p, s) __oscap_realloc ((void *)(p), s)
00078 # define oscap_reallocf(p, s) __oscap_reallocf((void *)(p), s)
00079 # define oscap_free(p) __oscap_free ((void *)(p))
00080 #else
00081 void *__oscap_alloc_dbg(size_t s, const char *f, size_t l);
00082 __P void *oscap_alloc(size_t s)
00083 {
00084 return __oscap_alloc_dbg(s, __FUNCTION__, 0);
00085 }
00086
00087 void *__oscap_calloc_dbg(size_t n, size_t s, const char *f, size_t l);
00088 __P void *oscap_calloc(size_t n, size_t s)
00089 {
00090 return __oscap_calloc_dbg(n, s, __FUNCTION__, 0);
00091 }
00092
00093 void *__oscap_realloc_dbg(void *p, size_t s, const char *f, size_t l);
00094 __P void *oscap_realloc(void *p, size_t s)
00095 {
00096 return __oscap_realloc_dbg(p, s, __FUNCTION__, 0);
00097 }
00098
00099 void *__oscap_reallocf_dbg(void *p, size_t s, const char *f, size_t l);
00100 __P void *oscap_reallocf(void *p, size_t s)
00101 {
00102 return __oscap_reallocf_dbg(p, s, __FUNCTION__, 0);
00103 }
00104
00105 void __oscap_free_dbg(void **p, const char *f, size_t l);
00106 __P void oscap_free(void *p)
00107 {
00108 __oscap_free_dbg(&p, __FUNCTION__, 0);
00109 }
00110
00114 # define oscap_alloc(s) __oscap_alloc_dbg (s, __PRETTY_FUNCTION__, __LINE__)
00115
00119 # define oscap_calloc(n, s) __oscap_calloc_dbg (n, s, __PRETTY_FUNCTION__, __LINE__)
00120
00124 # define oscap_realloc(p, s) __oscap_realloc_dbg ((void *)(p), s, __PRETTY_FUNCTION__, __LINE__)
00125
00129 # define oscap_reallocf(p, s) __oscap_reallocf_dbg ((void *)(p), s, __PRETTY_FUNCTION__, __LINE__)
00130
00134 # define oscap_free(p) __oscap_free_dbg ((void **)((void *)&(p)), __PRETTY_FUNCTION__, __LINE__)
00135 #endif
00136
00137 #define oscap_talloc(T) ((T *) oscap_alloc(sizeof(T)))
00138 #define oscap_valloc(v) ((typeof(v) *) oscap_alloc(sizeof v))
00139
00140 #include <assert.h>
00141 #ifndef _A
00142 # define _A(x) assert(x)
00143 #endif
00144 #endif