f20f6f3fdf
backported that was written for the TRE integration project in Google Summer of Code 2011. This is a temporary solution until the whole regex library is not replaced so that BSD grep development can continue and the backported code gets some review and testing. This change only improves scalability slightly, there is no big performance boost yet but several minor bugs have been found and fixed. Approved by: delphij (mentor) Sposored by: Google Summer of Code 2011 MFC after: 1 week
80 lines
2.4 KiB
C
80 lines
2.4 KiB
C
/* $FreeBSD$ */
|
|
|
|
/*
|
|
xmalloc.h - Simple malloc debugging library API
|
|
|
|
This software is released under a BSD-style license.
|
|
See the file LICENSE for details and copyright.
|
|
|
|
*/
|
|
|
|
#ifndef _XMALLOC_H
|
|
#define _XMALLOC_H 1
|
|
|
|
void *xmalloc_impl(size_t size, const char *file, int line, const char *func);
|
|
void *xcalloc_impl(size_t nmemb, size_t size, const char *file, int line,
|
|
const char *func);
|
|
void xfree_impl(void *ptr, const char *file, int line, const char *func);
|
|
void *xrealloc_impl(void *ptr, size_t new_size, const char *file, int line,
|
|
const char *func);
|
|
int xmalloc_dump_leaks(void);
|
|
void xmalloc_configure(int fail_after);
|
|
|
|
|
|
#ifndef XMALLOC_INTERNAL
|
|
#ifdef MALLOC_DEBUGGING
|
|
|
|
/* Version 2.4 and later of GCC define a magical variable `__PRETTY_FUNCTION__'
|
|
which contains the name of the function currently being defined.
|
|
# define __XMALLOC_FUNCTION __PRETTY_FUNCTION__
|
|
This is broken in G++ before version 2.6.
|
|
C9x has a similar variable called __func__, but prefer the GCC one since
|
|
it demangles C++ function names. */
|
|
# ifdef __GNUC__
|
|
# if __GNUC__ > 2 || (__GNUC__ == 2 \
|
|
&& __GNUC_MINOR__ >= (defined __cplusplus ? 6 : 4))
|
|
# define __XMALLOC_FUNCTION __PRETTY_FUNCTION__
|
|
# else
|
|
# define __XMALLOC_FUNCTION ((const char *) 0)
|
|
# endif
|
|
# else
|
|
# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
|
|
# define __XMALLOC_FUNCTION __func__
|
|
# else
|
|
# define __XMALLOC_FUNCTION ((const char *) 0)
|
|
# endif
|
|
# endif
|
|
|
|
#define xmalloc(size) xmalloc_impl(size, __FILE__, __LINE__, \
|
|
__XMALLOC_FUNCTION)
|
|
#define xcalloc(nmemb, size) xcalloc_impl(nmemb, size, __FILE__, __LINE__, \
|
|
__XMALLOC_FUNCTION)
|
|
#define xfree(ptr) xfree_impl(ptr, __FILE__, __LINE__, __XMALLOC_FUNCTION)
|
|
#define xrealloc(ptr, new_size) xrealloc_impl(ptr, new_size, __FILE__, \
|
|
__LINE__, __XMALLOC_FUNCTION)
|
|
#undef malloc
|
|
#undef calloc
|
|
#undef free
|
|
#undef realloc
|
|
|
|
#define malloc USE_XMALLOC_INSTEAD_OF_MALLOC
|
|
#define calloc USE_XCALLOC_INSTEAD_OF_CALLOC
|
|
#define free USE_XFREE_INSTEAD_OF_FREE
|
|
#define realloc USE_XREALLOC_INSTEAD_OF_REALLOC
|
|
|
|
#else /* !MALLOC_DEBUGGING */
|
|
|
|
#include <stdlib.h>
|
|
|
|
#define xmalloc(size) malloc(size)
|
|
#define xcalloc(nmemb, size) calloc(nmemb, size)
|
|
#define xfree(ptr) free(ptr)
|
|
#define xrealloc(ptr, new_size) realloc(ptr, new_size)
|
|
|
|
#endif /* !MALLOC_DEBUGGING */
|
|
#endif /* !XMALLOC_INTERNAL */
|
|
|
|
#endif /* _XMALLOC_H */
|
|
|
|
/* EOF */
|