Edit

kc3-lang/libxml2/include/libxml/xmlmemory.h

Branch :

  • Show log

    Commit

  • Author : Daniel Veillard
    Date : 2004-11-02 14:52:23
    Hash : 36e5cd50
    Message : adding xmlMemBlocks() work on generator of an automatic API regression * xmlmemory.c include/libxml/xmlmemory.h: adding xmlMemBlocks() * Makefile.am gentest.py testapi.c: work on generator of an automatic API regression test tool. * SAX2.c nanoftp.c parser.c parserInternals.c tree.c xmlIO.c xmlstring.c: various API hardeing changes as a result of running teh first set of automatic API regression tests. * test/slashdot16.xml: apparently missing from CVS, commited it Daniel

  • include/libxml/xmlmemory.h
  • /*
     * Summary: interface for the memory allocator
     * Description: provides interfaces for the memory allocator,
     *              including debugging capabilities.
     *
     * Copy: See Copyright for the status of this software.
     *
     * Author: Daniel Veillard
     */
    
    
    #ifndef __DEBUG_MEMORY_ALLOC__
    #define __DEBUG_MEMORY_ALLOC__
    
    #include <stdio.h>
    #include <libxml/xmlversion.h>
    
    /**
     * DEBUG_MEMORY:
     *
     * DEBUG_MEMORY replaces the allocator with a collect and debug
     * shell to the libc allocator.
     * DEBUG_MEMORY should only be activated when debugging 
     * libxml i.e. if libxml has been configured with --with-debug-mem too.
     */
    /* #define DEBUG_MEMORY_FREED */
    /* #define DEBUG_MEMORY_LOCATION */
    
    #ifdef DEBUG
    #ifndef DEBUG_MEMORY
    #define DEBUG_MEMORY
    #endif
    #endif
    
    /**
     * DEBUG_MEMORY_LOCATION:
     *
     * DEBUG_MEMORY_LOCATION should be activated only when debugging 
     * libxml i.e. if libxml has been configured with --with-debug-mem too.
     */
    #ifdef DEBUG_MEMORY_LOCATION
    #endif
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    /*
     * The XML memory wrapper support 4 basic overloadable functions.
     */
    /**
     * xmlFreeFunc:
     * @mem: an already allocated block of memory
     *
     * Signature for a free() implementation.
     */
    typedef void (XMLCALL *xmlFreeFunc)(void *mem);
    /**
     * xmlMallocFunc:
     * @size:  the size requested in bytes
     *
     * Signature for a malloc() implementation.
     *
     * Returns a pointer to the newly allocated block or NULL in case of error.
     */
    typedef void *(XMLCALL *xmlMallocFunc)(size_t size);
    
    /**
     * xmlReallocFunc:
     * @mem: an already allocated block of memory
     * @size:  the new size requested in bytes
     *
     * Signature for a realloc() implementation.
     *
     * Returns a pointer to the newly reallocated block or NULL in case of error.
     */
    typedef void *(XMLCALL *xmlReallocFunc)(void *mem, size_t size);
    
    /**
     * xmlStrdupFunc:
     * @str: a zero terminated string
     *
     * Signature for an strdup() implementation.
     *
     * Returns the copy of the string or NULL in case of error.
     */
    typedef char *(XMLCALL *xmlStrdupFunc)(const char *str);
    
    /*
     * The 4 interfaces used for all memory handling within libxml.
    LIBXML_DLL_IMPORT extern xmlFreeFunc xmlFree;
    LIBXML_DLL_IMPORT extern xmlMallocFunc xmlMalloc;
    LIBXML_DLL_IMPORT extern xmlMallocFunc xmlMallocAtomic;
    LIBXML_DLL_IMPORT extern xmlReallocFunc xmlRealloc;
    LIBXML_DLL_IMPORT extern xmlStrdupFunc xmlMemStrdup;
     */
    
    /*
     * The way to overload the existing functions.
     * The xmlGc function have an extra entry for atomic block
     * allocations useful for garbage collected memory allocators
     */
    XMLPUBFUN int XMLCALL
    	xmlMemSetup	(xmlFreeFunc freeFunc,
    			 xmlMallocFunc mallocFunc,
    			 xmlReallocFunc reallocFunc,
    			 xmlStrdupFunc strdupFunc);
    XMLPUBFUN int XMLCALL     
    	xmlMemGet	(xmlFreeFunc *freeFunc,
    			 xmlMallocFunc *mallocFunc,
    			 xmlReallocFunc *reallocFunc,
    			 xmlStrdupFunc *strdupFunc);
    XMLPUBFUN int XMLCALL     
    	xmlGcMemSetup	(xmlFreeFunc freeFunc,
    			 xmlMallocFunc mallocFunc,
    			 xmlMallocFunc mallocAtomicFunc,
    			 xmlReallocFunc reallocFunc,
    			 xmlStrdupFunc strdupFunc);
    XMLPUBFUN int XMLCALL     
    	xmlGcMemGet	(xmlFreeFunc *freeFunc,
    			 xmlMallocFunc *mallocFunc,
    			 xmlMallocFunc *mallocAtomicFunc,
    			 xmlReallocFunc *reallocFunc,
    			 xmlStrdupFunc *strdupFunc);
    
    /*
     * Initialization of the memory layer.
     */
    XMLPUBFUN int XMLCALL	
    	xmlInitMemory	(void);
    
    /* 
     * Cleanup of the memory layer.
     */
    XMLPUBFUN void XMLCALL                
                    xmlCleanupMemory        (void);
    /*
     * These are specific to the XML debug memory wrapper.
     */
    XMLPUBFUN int XMLCALL	
    	xmlMemUsed	(void);
    XMLPUBFUN int XMLCALL	
    	xmlMemBlocks	(void);
    XMLPUBFUN void XMLCALL	
    	xmlMemDisplay	(FILE *fp);
    XMLPUBFUN void XMLCALL	
    	xmlMemShow	(FILE *fp, int nr);
    XMLPUBFUN void XMLCALL	
    	xmlMemoryDump	(void);
    XMLPUBFUN void * XMLCALL	
    	xmlMemMalloc	(size_t size);
    XMLPUBFUN void * XMLCALL	
    	xmlMemRealloc	(void *ptr,size_t size);
    XMLPUBFUN void XMLCALL	
    	xmlMemFree	(void *ptr);
    XMLPUBFUN char * XMLCALL	
    	xmlMemoryStrdup	(const char *str);
    XMLPUBFUN void * XMLCALL  
    	xmlMallocLoc	(size_t size, const char *file, int line);
    XMLPUBFUN void * XMLCALL	
    	xmlReallocLoc	(void *ptr, size_t size, const char *file, int line);
    XMLPUBFUN void * XMLCALL	
    	xmlMallocAtomicLoc (size_t size, const char *file, int line);
    XMLPUBFUN char * XMLCALL	
    	xmlMemStrdupLoc	(const char *str, const char *file, int line);
    
    
    #ifdef DEBUG_MEMORY_LOCATION
    /**
     * xmlMalloc:
     * @size:  number of bytes to allocate
     *
     * Wrapper for the malloc() function used in the XML library.
     *
     * Returns the pointer to the allocated area or NULL in case of error.
     */
    #define xmlMalloc(size) xmlMallocLoc((size), __FILE__, __LINE__)
    /**
     * xmlMallocAtomic:
     * @size:  number of bytes to allocate
     *
     * Wrapper for the malloc() function used in the XML library for allocation
     * of block not containing pointers to other areas.
     *
     * Returns the pointer to the allocated area or NULL in case of error.
     */
    #define xmlMallocAtomic(size) xmlMallocAtomicLoc((size), __FILE__, __LINE__)
    /**
     * xmlRealloc:
     * @ptr:  pointer to the existing allocated area
     * @size:  number of bytes to allocate
     *
     * Wrapper for the realloc() function used in the XML library.
     *
     * Returns the pointer to the allocated area or NULL in case of error.
     */
    #define xmlRealloc(ptr, size) xmlReallocLoc((ptr), (size), __FILE__, __LINE__)
    /**
     * xmlMemStrdup:
     * @str:  pointer to the existing string
     *
     * Wrapper for the strdup() function, xmlStrdup() is usually preferred.
     *
     * Returns the pointer to the allocated area or NULL in case of error.
     */
    #define xmlMemStrdup(str) xmlMemStrdupLoc((str), __FILE__, __LINE__)
    
    #endif /* DEBUG_MEMORY_LOCATION */
    
    #ifdef __cplusplus
    }
    #endif /* __cplusplus */
    
    #ifndef __XML_GLOBALS_H
    #ifndef __XML_THREADS_H__
    #include <libxml/threads.h>
    #include <libxml/globals.h>
    #endif
    #endif
    
    #endif  /* __DEBUG_MEMORY_ALLOC__ */