(root)/
libxml2-2.12.3/
include/
libxml/
xmlmemory.h
       1  /*
       2   * Summary: interface for the memory allocator
       3   * Description: provides interfaces for the memory allocator,
       4   *              including debugging capabilities.
       5   *
       6   * Copy: See Copyright for the status of this software.
       7   *
       8   * Author: Daniel Veillard
       9   */
      10  
      11  
      12  #ifndef __DEBUG_MEMORY_ALLOC__
      13  #define __DEBUG_MEMORY_ALLOC__
      14  
      15  #include <stdio.h>
      16  #include <libxml/xmlversion.h>
      17  
      18  #ifdef __cplusplus
      19  extern "C" {
      20  #endif
      21  
      22  /*
      23   * The XML memory wrapper support 4 basic overloadable functions.
      24   */
      25  /**
      26   * xmlFreeFunc:
      27   * @mem: an already allocated block of memory
      28   *
      29   * Signature for a free() implementation.
      30   */
      31  typedef void (*xmlFreeFunc)(void *mem);
      32  /**
      33   * xmlMallocFunc:
      34   * @size:  the size requested in bytes
      35   *
      36   * Signature for a malloc() implementation.
      37   *
      38   * Returns a pointer to the newly allocated block or NULL in case of error.
      39   */
      40  typedef void *(LIBXML_ATTR_ALLOC_SIZE(1) *xmlMallocFunc)(size_t size);
      41  
      42  /**
      43   * xmlReallocFunc:
      44   * @mem: an already allocated block of memory
      45   * @size:  the new size requested in bytes
      46   *
      47   * Signature for a realloc() implementation.
      48   *
      49   * Returns a pointer to the newly reallocated block or NULL in case of error.
      50   */
      51  typedef void *(*xmlReallocFunc)(void *mem, size_t size);
      52  
      53  /**
      54   * xmlStrdupFunc:
      55   * @str: a zero terminated string
      56   *
      57   * Signature for an strdup() implementation.
      58   *
      59   * Returns the copy of the string or NULL in case of error.
      60   */
      61  typedef char *(*xmlStrdupFunc)(const char *str);
      62  
      63  /*
      64   * In general the memory allocation entry points are not kept
      65   * thread specific but this can be overridden by LIBXML_THREAD_ALLOC_ENABLED
      66   *    - xmlMalloc
      67   *    - xmlMallocAtomic
      68   *    - xmlRealloc
      69   *    - xmlMemStrdup
      70   *    - xmlFree
      71   */
      72  /** DOC_DISABLE */
      73  #ifdef LIBXML_THREAD_ALLOC_ENABLED
      74    #define XML_GLOBALS_ALLOC \
      75      XML_OP(xmlMalloc, xmlMallocFunc, XML_NO_ATTR) \
      76      XML_OP(xmlMallocAtomic, xmlMallocFunc, XML_NO_ATTR) \
      77      XML_OP(xmlRealloc, xmlReallocFunc, XML_NO_ATTR) \
      78      XML_OP(xmlFree, xmlFreeFunc, XML_NO_ATTR) \
      79      XML_OP(xmlMemStrdup, xmlStrdupFunc, XML_NO_ATTR)
      80    #define XML_OP XML_DECLARE_GLOBAL
      81      XML_GLOBALS_ALLOC
      82    #undef XML_OP
      83    #if defined(LIBXML_THREAD_ENABLED) && !defined(XML_GLOBALS_NO_REDEFINITION)
      84      #define xmlMalloc XML_GLOBAL_MACRO(xmlMalloc)
      85      #define xmlMallocAtomic XML_GLOBAL_MACRO(xmlMallocAtomic)
      86      #define xmlRealloc XML_GLOBAL_MACRO(xmlRealloc)
      87      #define xmlFree XML_GLOBAL_MACRO(xmlFree)
      88      #define xmlMemStrdup XML_GLOBAL_MACRO(xmlMemStrdup)
      89    #endif
      90  #else
      91    #define XML_GLOBALS_ALLOC
      92  /** DOC_ENABLE */
      93    XMLPUBVAR xmlMallocFunc xmlMalloc;
      94    XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
      95    XMLPUBVAR xmlReallocFunc xmlRealloc;
      96    XMLPUBVAR xmlFreeFunc xmlFree;
      97    XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
      98  #endif
      99  
     100  /*
     101   * The way to overload the existing functions.
     102   * The xmlGc function have an extra entry for atomic block
     103   * allocations useful for garbage collected memory allocators
     104   */
     105  XMLPUBFUN int
     106  	xmlMemSetup	(xmlFreeFunc freeFunc,
     107  			 xmlMallocFunc mallocFunc,
     108  			 xmlReallocFunc reallocFunc,
     109  			 xmlStrdupFunc strdupFunc);
     110  XMLPUBFUN int
     111  	xmlMemGet	(xmlFreeFunc *freeFunc,
     112  			 xmlMallocFunc *mallocFunc,
     113  			 xmlReallocFunc *reallocFunc,
     114  			 xmlStrdupFunc *strdupFunc);
     115  XMLPUBFUN int
     116  	xmlGcMemSetup	(xmlFreeFunc freeFunc,
     117  			 xmlMallocFunc mallocFunc,
     118  			 xmlMallocFunc mallocAtomicFunc,
     119  			 xmlReallocFunc reallocFunc,
     120  			 xmlStrdupFunc strdupFunc);
     121  XMLPUBFUN int
     122  	xmlGcMemGet	(xmlFreeFunc *freeFunc,
     123  			 xmlMallocFunc *mallocFunc,
     124  			 xmlMallocFunc *mallocAtomicFunc,
     125  			 xmlReallocFunc *reallocFunc,
     126  			 xmlStrdupFunc *strdupFunc);
     127  
     128  /*
     129   * Initialization of the memory layer.
     130   */
     131  XML_DEPRECATED
     132  XMLPUBFUN int
     133  	xmlInitMemory	(void);
     134  
     135  /*
     136   * Cleanup of the memory layer.
     137   */
     138  XML_DEPRECATED
     139  XMLPUBFUN void
     140                  xmlCleanupMemory        (void);
     141  /*
     142   * These are specific to the XML debug memory wrapper.
     143   */
     144  XMLPUBFUN size_t
     145  	xmlMemSize	(void *ptr);
     146  XMLPUBFUN int
     147  	xmlMemUsed	(void);
     148  XMLPUBFUN int
     149  	xmlMemBlocks	(void);
     150  XMLPUBFUN void
     151  	xmlMemDisplay	(FILE *fp);
     152  XMLPUBFUN void
     153  	xmlMemDisplayLast(FILE *fp, long nbBytes);
     154  XMLPUBFUN void
     155  	xmlMemShow	(FILE *fp, int nr);
     156  XMLPUBFUN void
     157  	xmlMemoryDump	(void);
     158  XMLPUBFUN void *
     159  	xmlMemMalloc	(size_t size) LIBXML_ATTR_ALLOC_SIZE(1);
     160  XMLPUBFUN void *
     161  	xmlMemRealloc	(void *ptr,size_t size);
     162  XMLPUBFUN void
     163  	xmlMemFree	(void *ptr);
     164  XMLPUBFUN char *
     165  	xmlMemoryStrdup	(const char *str);
     166  XMLPUBFUN void *
     167  	xmlMallocLoc	(size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
     168  XMLPUBFUN void *
     169  	xmlReallocLoc	(void *ptr, size_t size, const char *file, int line);
     170  XMLPUBFUN void *
     171  	xmlMallocAtomicLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
     172  XMLPUBFUN char *
     173  	xmlMemStrdupLoc	(const char *str, const char *file, int line);
     174  
     175  
     176  /** DOC_DISABLE */
     177  #ifdef DEBUG_MEMORY_LOCATION
     178  /**
     179   * xmlMalloc:
     180   * @size:  number of bytes to allocate
     181   *
     182   * Wrapper for the malloc() function used in the XML library.
     183   *
     184   * Returns the pointer to the allocated area or NULL in case of error.
     185   */
     186  #define xmlMalloc(size) xmlMallocLoc((size), __FILE__, __LINE__)
     187  /**
     188   * xmlMallocAtomic:
     189   * @size:  number of bytes to allocate
     190   *
     191   * Wrapper for the malloc() function used in the XML library for allocation
     192   * of block not containing pointers to other areas.
     193   *
     194   * Returns the pointer to the allocated area or NULL in case of error.
     195   */
     196  #define xmlMallocAtomic(size) xmlMallocAtomicLoc((size), __FILE__, __LINE__)
     197  /**
     198   * xmlRealloc:
     199   * @ptr:  pointer to the existing allocated area
     200   * @size:  number of bytes to allocate
     201   *
     202   * Wrapper for the realloc() function used in the XML library.
     203   *
     204   * Returns the pointer to the allocated area or NULL in case of error.
     205   */
     206  #define xmlRealloc(ptr, size) xmlReallocLoc((ptr), (size), __FILE__, __LINE__)
     207  /**
     208   * xmlMemStrdup:
     209   * @str:  pointer to the existing string
     210   *
     211   * Wrapper for the strdup() function, xmlStrdup() is usually preferred.
     212   *
     213   * Returns the pointer to the allocated area or NULL in case of error.
     214   */
     215  #define xmlMemStrdup(str) xmlMemStrdupLoc((str), __FILE__, __LINE__)
     216  
     217  #endif /* DEBUG_MEMORY_LOCATION */
     218  /** DOC_ENABLE */
     219  
     220  #ifdef __cplusplus
     221  }
     222  #endif /* __cplusplus */
     223  
     224  #endif  /* __DEBUG_MEMORY_ALLOC__ */
     225