/extensions/spellcheck/hunspell/src/hunspell_alloc_hooks.h

http://github.com/zpao/v8monkey · C Header · 108 lines · 51 code · 12 blank · 45 comment · 0 complexity · 2269ca54a09f48ac58ba902a0c91af59 MD5 · raw file

  1. /******* BEGIN LICENSE BLOCK *******
  2. * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3. *
  4. * The contents of this file are subject to the Mozilla Public License Version
  5. * 1.1 (the "License"); you may not use this file except in compliance with
  6. * the License. You may obtain a copy of the License at
  7. * http://www.mozilla.org/MPL/
  8. *
  9. * Software distributed under the License is distributed on an "AS IS" basis,
  10. * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11. * for the specific language governing rights and limitations under the
  12. * License.
  13. *
  14. * The Initial Developers of the Original Code is Mozilla Foundation.
  15. * Portions created by the Initial Developers
  16. * are Copyright (C) 2011 the Initial Developers. All Rights Reserved.
  17. *
  18. * Contributor(s):
  19. *
  20. * Alternatively, the contents of this file may be used under the terms of
  21. * either the GNU General Public License Version 2 or later (the "GPL"), or
  22. * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  23. * in which case the provisions of the GPL or the LGPL are applicable instead
  24. * of those above. If you wish to allow use of your version of this file only
  25. * under the terms of either the GPL or the LGPL, and not to allow others to
  26. * use your version of this file under the terms of the MPL, indicate your
  27. * decision by deleting the provisions above and replace them with the notice
  28. * and other provisions required by the GPL or the LGPL. If you do not delete
  29. * the provisions above, a recipient may use your version of this file under
  30. * the terms of any one of the MPL, the GPL or the LGPL.
  31. *
  32. ******* END LICENSE BLOCK *******/
  33. #ifndef alloc_hooks_h__
  34. #define alloc_hooks_h__
  35. /**
  36. * This file is force-included in hunspell code. Its purpose is to add memory
  37. * reporting to hunspell without modifying its code, in order to ease future
  38. * upgrades.
  39. *
  40. * This file is force-included through mozilla-config.h which is generated
  41. * during the configure step.
  42. *
  43. * Currently, the memory allocated using operator new/new[] is not being
  44. * tracked, but that's OK, since almost all of the memory used by Hunspell is
  45. * allocated using C memory allocation functions.
  46. */
  47. // Prevent the standard macros from being redefined
  48. #define mozilla_mozalloc_macro_wrappers_h
  49. #include "mozilla/mozalloc.h"
  50. extern void HunspellReportMemoryAllocation(void*);
  51. extern void HunspellReportMemoryDeallocation(void*);
  52. inline void* hunspell_malloc(size_t size)
  53. {
  54. void* result = moz_malloc(size);
  55. HunspellReportMemoryAllocation(result);
  56. return result;
  57. }
  58. #define malloc(size) hunspell_malloc(size)
  59. inline void* hunspell_calloc(size_t count, size_t size)
  60. {
  61. void* result = moz_calloc(count, size);
  62. HunspellReportMemoryAllocation(result);
  63. return result;
  64. }
  65. #define calloc(count, size) hunspell_calloc(count, size)
  66. inline void hunspell_free(void* ptr)
  67. {
  68. HunspellReportMemoryDeallocation(ptr);
  69. moz_free(ptr);
  70. }
  71. #define free(ptr) hunspell_free(ptr)
  72. inline void* hunspell_realloc(void* ptr, size_t size)
  73. {
  74. HunspellReportMemoryDeallocation(ptr);
  75. void* result = moz_realloc(ptr, size);
  76. HunspellReportMemoryAllocation(result);
  77. return result;
  78. }
  79. #define realloc(ptr, size) hunspell_realloc(ptr, size)
  80. inline char* hunspell_strdup(const char* str)
  81. {
  82. char* result = moz_strdup(str);
  83. HunspellReportMemoryAllocation(result);
  84. return result;
  85. }
  86. #define strdup(str) hunspell_strdup(str)
  87. #if defined(HAVE_STRNDUP)
  88. inline char* hunspell_strndup(const char* str, size_t size)
  89. {
  90. char* result = moz_strndup(str, size);
  91. HunspellReportMemoryAllocation(result);
  92. return result;
  93. }
  94. #define strndup(str, size) hunspell_strndup(str, size)
  95. #endif
  96. #endif