(root)/
gettext-0.22.4/
libtextstyle/
lib/
libxml/
xmlmemory.in.h
       1  /* libxml2 - Library for parsing XML documents
       2   * Copyright (C) 2006-2019 Free Software Foundation, Inc.
       3   *
       4   * This file is not part of the GNU gettext program, but is used with
       5   * GNU gettext.
       6   *
       7   * The original copyright notice is as follows:
       8   */
       9  
      10  /*
      11   * Copyright (C) 1998-2012 Daniel Veillard.  All Rights Reserved.
      12   *
      13   * Permission is hereby granted, free of charge, to any person obtaining a copy
      14   * of this software and associated documentation files (the "Software"), to deal
      15   * in the Software without restriction, including without limitation the rights
      16   * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      17   * copies of the Software, and to permit persons to whom the Software is fur-
      18   * nished to do so, subject to the following conditions:
      19   *
      20   * The above copyright notice and this permission notice shall be included in
      21   * all copies or substantial portions of the Software.
      22   *
      23   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      24   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FIT-
      25   * NESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
      26   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      27   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      28   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
      29   * THE SOFTWARE.
      30   *
      31   * Author: Daniel Veillard
      32   */
      33  
      34  /*
      35   * Summary: interface for the memory allocator
      36   * Description: provides interfaces for the memory allocator,
      37   *              including debugging capabilities.
      38   */
      39  
      40  #ifndef __DEBUG_MEMORY_ALLOC__
      41  #define __DEBUG_MEMORY_ALLOC__
      42  
      43  #include <stdio.h>
      44  #include <libxml/xmlversion.h>
      45  
      46  /**
      47   * DEBUG_MEMORY:
      48   *
      49   * DEBUG_MEMORY replaces the allocator with a collect and debug
      50   * shell to the libc allocator.
      51   * DEBUG_MEMORY should only be activated when debugging
      52   * libxml i.e. if libxml has been configured with --with-debug-mem too.
      53   */
      54  /* #define DEBUG_MEMORY_FREED */
      55  /* #define DEBUG_MEMORY_LOCATION */
      56  
      57  #ifdef DEBUG
      58  #ifndef DEBUG_MEMORY
      59  #define DEBUG_MEMORY
      60  #endif
      61  #endif
      62  
      63  /**
      64   * DEBUG_MEMORY_LOCATION:
      65   *
      66   * DEBUG_MEMORY_LOCATION should be activated only when debugging
      67   * libxml i.e. if libxml has been configured with --with-debug-mem too.
      68   */
      69  #ifdef DEBUG_MEMORY_LOCATION
      70  #endif
      71  
      72  #ifdef __cplusplus
      73  extern "C" {
      74  #endif
      75  
      76  /*
      77   * The XML memory wrapper support 4 basic overloadable functions.
      78   */
      79  /**
      80   * xmlFreeFunc:
      81   * @mem: an already allocated block of memory
      82   *
      83   * Signature for a free() implementation.
      84   */
      85  typedef void (XMLCALL *xmlFreeFunc)(void *mem);
      86  /**
      87   * xmlMallocFunc:
      88   * @size:  the size requested in bytes
      89   *
      90   * Signature for a malloc() implementation.
      91   *
      92   * Returns a pointer to the newly allocated block or NULL in case of error.
      93   */
      94  typedef void *(LIBXML_ATTR_ALLOC_SIZE(1) XMLCALL *xmlMallocFunc)(size_t size);
      95  
      96  /**
      97   * xmlReallocFunc:
      98   * @mem: an already allocated block of memory
      99   * @size:  the new size requested in bytes
     100   *
     101   * Signature for a realloc() implementation.
     102   *
     103   * Returns a pointer to the newly reallocated block or NULL in case of error.
     104   */
     105  typedef void *(XMLCALL *xmlReallocFunc)(void *mem, size_t size);
     106  
     107  /**
     108   * xmlStrdupFunc:
     109   * @str: a zero terminated string
     110   *
     111   * Signature for an strdup() implementation.
     112   *
     113   * Returns the copy of the string or NULL in case of error.
     114   */
     115  typedef char *(XMLCALL *xmlStrdupFunc)(const char *str);
     116  
     117  /*
     118   * The 4 interfaces used for all memory handling within libxml.
     119  LIBXML_DLL_IMPORT xmlFreeFunc xmlFree;
     120  LIBXML_DLL_IMPORT xmlMallocFunc xmlMalloc;
     121  LIBXML_DLL_IMPORT xmlMallocFunc xmlMallocAtomic;
     122  LIBXML_DLL_IMPORT xmlReallocFunc xmlRealloc;
     123  LIBXML_DLL_IMPORT xmlStrdupFunc xmlMemStrdup;
     124   */
     125  
     126  /*
     127   * The way to overload the existing functions.
     128   * The xmlGc function have an extra entry for atomic block
     129   * allocations useful for garbage collected memory allocators
     130   */
     131  XMLPUBFUN int XMLCALL
     132  	xmlMemSetup	(xmlFreeFunc freeFunc,
     133  			 xmlMallocFunc mallocFunc,
     134  			 xmlReallocFunc reallocFunc,
     135  			 xmlStrdupFunc strdupFunc);
     136  XMLPUBFUN int XMLCALL
     137  	xmlMemGet	(xmlFreeFunc *freeFunc,
     138  			 xmlMallocFunc *mallocFunc,
     139  			 xmlReallocFunc *reallocFunc,
     140  			 xmlStrdupFunc *strdupFunc);
     141  XMLPUBFUN int XMLCALL
     142  	xmlGcMemSetup	(xmlFreeFunc freeFunc,
     143  			 xmlMallocFunc mallocFunc,
     144  			 xmlMallocFunc mallocAtomicFunc,
     145  			 xmlReallocFunc reallocFunc,
     146  			 xmlStrdupFunc strdupFunc);
     147  XMLPUBFUN int XMLCALL
     148  	xmlGcMemGet	(xmlFreeFunc *freeFunc,
     149  			 xmlMallocFunc *mallocFunc,
     150  			 xmlMallocFunc *mallocAtomicFunc,
     151  			 xmlReallocFunc *reallocFunc,
     152  			 xmlStrdupFunc *strdupFunc);
     153  
     154  /*
     155   * Initialization of the memory layer.
     156   */
     157  XMLPUBFUN int XMLCALL
     158  	xmlInitMemory	(void);
     159  
     160  /*
     161   * Cleanup of the memory layer.
     162   */
     163  XMLPUBFUN void XMLCALL
     164                  xmlCleanupMemory        (void);
     165  /*
     166   * These are specific to the XML debug memory wrapper.
     167   */
     168  XMLPUBFUN int XMLCALL
     169  	xmlMemUsed	(void);
     170  XMLPUBFUN int XMLCALL
     171  	xmlMemBlocks	(void);
     172  XMLPUBFUN void XMLCALL
     173  	xmlMemDisplay	(FILE *fp);
     174  XMLPUBFUN void XMLCALL
     175  	xmlMemDisplayLast(FILE *fp, long nbBytes);
     176  XMLPUBFUN void XMLCALL
     177  	xmlMemShow	(FILE *fp, int nr);
     178  XMLPUBFUN void XMLCALL
     179  	xmlMemoryDump	(void);
     180  XMLPUBFUN void * XMLCALL
     181  	xmlMemMalloc	(size_t size) LIBXML_ATTR_ALLOC_SIZE(1);
     182  XMLPUBFUN void * XMLCALL
     183  	xmlMemRealloc	(void *ptr,size_t size);
     184  XMLPUBFUN void XMLCALL
     185  	xmlMemFree	(void *ptr);
     186  XMLPUBFUN char * XMLCALL
     187  	xmlMemoryStrdup	(const char *str);
     188  XMLPUBFUN void * XMLCALL
     189  	xmlMallocLoc	(size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
     190  XMLPUBFUN void * XMLCALL
     191  	xmlReallocLoc	(void *ptr, size_t size, const char *file, int line);
     192  XMLPUBFUN void * XMLCALL
     193  	xmlMallocAtomicLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
     194  XMLPUBFUN char * XMLCALL
     195  	xmlMemStrdupLoc	(const char *str, const char *file, int line);
     196  
     197  
     198  #ifdef DEBUG_MEMORY_LOCATION
     199  /**
     200   * xmlMalloc:
     201   * @size:  number of bytes to allocate
     202   *
     203   * Wrapper for the malloc() function used in the XML library.
     204   *
     205   * Returns the pointer to the allocated area or NULL in case of error.
     206   */
     207  #define xmlMalloc(size) xmlMallocLoc((size), __FILE__, __LINE__)
     208  /**
     209   * xmlMallocAtomic:
     210   * @size:  number of bytes to allocate
     211   *
     212   * Wrapper for the malloc() function used in the XML library for allocation
     213   * of block not containing pointers to other areas.
     214   *
     215   * Returns the pointer to the allocated area or NULL in case of error.
     216   */
     217  #define xmlMallocAtomic(size) xmlMallocAtomicLoc((size), __FILE__, __LINE__)
     218  /**
     219   * xmlRealloc:
     220   * @ptr:  pointer to the existing allocated area
     221   * @size:  number of bytes to allocate
     222   *
     223   * Wrapper for the realloc() function used in the XML library.
     224   *
     225   * Returns the pointer to the allocated area or NULL in case of error.
     226   */
     227  #define xmlRealloc(ptr, size) xmlReallocLoc((ptr), (size), __FILE__, __LINE__)
     228  /**
     229   * xmlMemStrdup:
     230   * @str:  pointer to the existing string
     231   *
     232   * Wrapper for the strdup() function, xmlStrdup() is usually preferred.
     233   *
     234   * Returns the pointer to the allocated area or NULL in case of error.
     235   */
     236  #define xmlMemStrdup(str) xmlMemStrdupLoc((str), __FILE__, __LINE__)
     237  
     238  #endif /* DEBUG_MEMORY_LOCATION */
     239  
     240  #ifdef __cplusplus
     241  }
     242  #endif /* __cplusplus */
     243  
     244  #ifndef __XML_GLOBALS_H
     245  #ifndef __XML_THREADS_H__
     246  #include <libxml/threads.h>
     247  #include <libxml/globals.h>
     248  #endif
     249  #endif
     250  
     251  #endif  /* __DEBUG_MEMORY_ALLOC__ */
     252