65 static int allow_customize = 1;
66 static int allow_customize_debug = 1;
77 static void *(*malloc_func)(size_t) = malloc;
78 static void *default_malloc_ex(
size_t num,
const char *
file,
int line)
79 {
return malloc_func(num); }
80 static void *(*malloc_ex_func)(size_t,
const char *
file,
int line)
83 static void *(*realloc_func)(
void *, size_t)= realloc;
84 static void *default_realloc_ex(
void *str,
size_t num,
85 const char *
file,
int line)
86 {
return realloc_func(str,num); }
87 static void *(*realloc_ex_func)(
void *, size_t,
const char *
file,
int line)
92 static void *(*malloc_locked_func)(size_t) = malloc;
93 static void *default_malloc_locked_ex(
size_t num,
const char *
file,
int line)
94 {
return malloc_locked_func(num); }
95 static void *(*malloc_locked_ex_func)(size_t,
const char *
file,
int line)
96 = default_malloc_locked_ex;
98 static void (*free_locked_func)(
void *) = free;
106 static void (*malloc_debug_func)(
void *,int,
const char *,int,int)
108 static void (*realloc_debug_func)(
void *,
void *,int,
const char *,int,int)
116 static void (*malloc_debug_func)(
void *,int,
const char *,int,int) = NULL;
117 static void (*realloc_debug_func)(
void *,
void *,int,
const char *,int,int)
119 static void (*free_debug_func)(
void *,int) = NULL;
120 static void (*set_debug_options_func)(long) = NULL;
121 static long (*get_debug_options_func)(
void) = NULL;
129 if (!allow_customize)
131 if ((m == 0) || (r == 0) || (
f == 0))
133 malloc_func=m; malloc_ex_func=default_malloc_ex;
134 realloc_func=r; realloc_ex_func=default_realloc_ex;
136 malloc_locked_func=m; malloc_locked_ex_func=default_malloc_locked_ex;
142 void *(*m)(
size_t,
const char *,
int),
143 void *(*r)(
void *,
size_t,
const char *,
int),
146 if (!allow_customize)
148 if ((m == 0) || (r == 0) || (
f == 0))
150 malloc_func=0; malloc_ex_func=m;
151 realloc_func=0; realloc_ex_func=r;
153 malloc_locked_func=0; malloc_locked_ex_func=m;
160 if (!allow_customize)
162 if ((m == NULL) || (
f == NULL))
164 malloc_locked_func=m; malloc_locked_ex_func=default_malloc_locked_ex;
170 void *(*m)(
size_t,
const char *,
int),
173 if (!allow_customize)
175 if ((m == NULL) || (
f == NULL))
177 malloc_locked_func=0; malloc_locked_ex_func=m;
183 void (*r)(
void *,
void *,
int,
const char *,
int,
int),
184 void (*
f)(
void *,
int),
188 if (!allow_customize_debug)
192 realloc_debug_func=r;
194 set_debug_options_func=so;
195 get_debug_options_func=go;
203 if (m != NULL) *m = (malloc_ex_func == default_malloc_ex) ?
205 if (r != NULL) *r = (realloc_ex_func == default_realloc_ex) ?
211 void *(**m)(
size_t,
const char *,
int),
212 void *(**r)(
void *,
size_t,
const char *,
int),
215 if (m != NULL) *m = (malloc_ex_func != default_malloc_ex) ?
217 if (r != NULL) *r = (realloc_ex_func != default_realloc_ex) ?
224 if (m != NULL) *m = (malloc_locked_ex_func == default_malloc_locked_ex) ?
225 malloc_locked_func : 0;
226 if (
f != NULL) *
f=free_locked_func;
230 void *(**m)(
size_t,
const char *,
int),
233 if (m != NULL) *m = (malloc_locked_ex_func != default_malloc_locked_ex) ?
234 malloc_locked_ex_func : 0;
235 if (
f != NULL) *
f=free_locked_func;
239 void (**r)(
void *,
void *,
int,
const char *,
int,
int),
240 void (**
f)(
void *,
int),
244 if (m != NULL) *m=malloc_debug_func;
245 if (r != NULL) *r=realloc_debug_func;
246 if (
f != NULL) *
f=free_debug_func;
247 if (so != NULL) *so=set_debug_options_func;
248 if (go != NULL) *go=get_debug_options_func;
256 if (num <= 0)
return NULL;
259 if (malloc_debug_func != NULL)
261 allow_customize_debug = 0;
262 malloc_debug_func(NULL, num, file, line, 0);
264 ret = malloc_locked_ex_func(num,file,line);
265 #ifdef LEVITTE_DEBUG_MEM
266 fprintf(stderr,
"LEVITTE_DEBUG_MEM: > 0x%p (%d)\n", ret, num);
268 if (malloc_debug_func != NULL)
269 malloc_debug_func(ret, num, file, line, 1);
271 #ifndef OPENSSL_CPUID_OBJ
275 if(ret && (num > 2048))
286 if (free_debug_func != NULL)
287 free_debug_func(str, 0);
288 #ifdef LEVITTE_DEBUG_MEM
289 fprintf(stderr,
"LEVITTE_DEBUG_MEM: < 0x%p\n", str);
291 free_locked_func(str);
292 if (free_debug_func != NULL)
293 free_debug_func(NULL, 1);
300 if (num <= 0)
return NULL;
303 if (malloc_debug_func != NULL)
305 allow_customize_debug = 0;
306 malloc_debug_func(NULL, num, file, line, 0);
308 ret = malloc_ex_func(num,file,line);
309 #ifdef LEVITTE_DEBUG_MEM
310 fprintf(stderr,
"LEVITTE_DEBUG_MEM: > 0x%p (%d)\n", ret, num);
312 if (malloc_debug_func != NULL)
313 malloc_debug_func(ret, num, file, line, 1);
315 #ifndef OPENSSL_CPUID_OBJ
319 if(ret && (num > 2048))
342 if (num <= 0)
return NULL;
344 if (realloc_debug_func != NULL)
345 realloc_debug_func(str, NULL, num, file, line, 0);
346 ret = realloc_ex_func(str,num,file,line);
347 #ifdef LEVITTE_DEBUG_MEM
348 fprintf(stderr,
"LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n", str, ret, num);
350 if (realloc_debug_func != NULL)
351 realloc_debug_func(str, ret, num, file, line, 1);
364 if (num <= 0)
return NULL;
368 if (num < old_len)
return NULL;
370 if (realloc_debug_func != NULL)
371 realloc_debug_func(str, NULL, num, file, line, 0);
372 ret=malloc_ex_func(num,file,line);
375 memcpy(ret,str,old_len);
379 #ifdef LEVITTE_DEBUG_MEM
381 "LEVITTE_DEBUG_MEM: | 0x%p -> 0x%p (%d)\n",
384 if (realloc_debug_func != NULL)
385 realloc_debug_func(str, ret, num, file, line, 1);
392 if (free_debug_func != NULL)
393 free_debug_func(str, 0);
394 #ifdef LEVITTE_DEBUG_MEM
395 fprintf(stderr,
"LEVITTE_DEBUG_MEM: < 0x%p\n", str);
398 if (free_debug_func != NULL)
399 free_debug_func(NULL, 1);
411 if (set_debug_options_func != NULL)
412 set_debug_options_func(bits);
417 if (get_debug_options_func != NULL)
418 return get_debug_options_func();