1999-09-03 02:04:43 +04:00
/*
1999-12-28 19:35:14 +03:00
* xmlmemory . h : interface for the memory allocation debug .
1999-09-03 02:04:43 +04:00
*
* Daniel . Veillard @ w3 . org
*/
# ifndef _DEBUG_MEMORY_ALLOC_
# define _DEBUG_MEMORY_ALLOC_
# include <stdio.h>
2000-04-03 23:48:13 +04:00
# include <libxml/xmlversion.h>
1999-09-03 02:04:43 +04:00
2000-03-20 16:07:15 +03:00
/*
* DEBUG_MEMORY_LOCATION should be activated only done when debugging
* libxml .
*/
/* #define DEBUG_MEMORY_LOCATION */
1999-09-03 02:04:43 +04:00
# ifdef DEBUG
# ifndef DEBUG_MEMORY
# define DEBUG_MEMORY
# endif
# endif
2000-03-20 16:07:15 +03:00
# ifdef DEBUG_MEMORY_LOCATION
1999-09-03 02:04:43 +04:00
# define MEM_LIST /* keep a list of all the allocated memory blocks */
2000-03-20 16:07:15 +03:00
# endif
1999-09-03 02:04:43 +04:00
1999-12-21 18:35:29 +03:00
# ifdef __cplusplus
extern " C " {
# endif
2000-03-20 16:07:15 +03:00
/*
* The XML memory wrapper support 4 basic overloadable functions
*/
typedef void ( * xmlFreeFunc ) ( void * ) ;
typedef void * ( * xmlMallocFunc ) ( int ) ;
typedef void * ( * xmlReallocFunc ) ( void * , int ) ;
typedef char * ( * xmlStrdupFunc ) ( const char * ) ;
/*
* The 4 interfaces used for all memory handling within libxml
*/
2000-11-17 19:36:08 +03:00
LIBXML_DLL_IMPORT extern xmlFreeFunc xmlFree ;
LIBXML_DLL_IMPORT extern xmlMallocFunc xmlMalloc ;
LIBXML_DLL_IMPORT extern xmlReallocFunc xmlRealloc ;
LIBXML_DLL_IMPORT extern xmlStrdupFunc xmlMemStrdup ;
2000-03-20 16:07:15 +03:00
/*
* The way to overload the existing functions
*/
int xmlMemSetup ( xmlFreeFunc freeFunc ,
xmlMallocFunc mallocFunc ,
xmlReallocFunc reallocFunc ,
xmlStrdupFunc strdupFunc ) ;
int xmlMemGet ( xmlFreeFunc * freeFunc ,
xmlMallocFunc * mallocFunc ,
xmlReallocFunc * reallocFunc ,
xmlStrdupFunc * strdupFunc ) ;
/*
* Initialization of the memory layer
*/
1999-09-03 02:04:43 +04:00
int xmlInitMemory ( void ) ;
2000-03-20 16:07:15 +03:00
/*
* Those are specific to the XML debug memory wrapper
*/
1999-09-03 02:04:43 +04:00
int xmlMemUsed ( void ) ;
void xmlMemDisplay ( FILE * fp ) ;
1999-12-28 19:35:14 +03:00
void xmlMemShow ( FILE * fp , int nr ) ;
1999-09-03 02:04:43 +04:00
void xmlMemoryDump ( void ) ;
int xmlInitMemory ( void ) ;
# ifdef DEBUG_MEMORY_LOCATION
# define xmlMalloc(x) xmlMallocLoc((x), __FILE__, __LINE__)
# define xmlRealloc(p, x) xmlReallocLoc((p), (x), __FILE__, __LINE__)
# define xmlMemStrdup(x) xmlMemStrdupLoc((x), __FILE__, __LINE__)
2000-11-17 19:36:08 +03:00
void * xmlMallocLoc ( int size , const char * file , int line ) ;
void * xmlReallocLoc ( void * ptr , int size , const char * file , int line ) ;
char * xmlMemStrdupLoc ( const char * str , const char * file , int line ) ;
2000-03-20 16:07:15 +03:00
# endif /* DEBUG_MEMORY_LOCATION */
1999-12-21 18:35:29 +03:00
# ifdef __cplusplus
}
2000-03-20 16:07:15 +03:00
# endif /* __cplusplus */
1999-09-03 02:04:43 +04:00
# endif /* _DEBUG_MEMORY_ALLOC_ */