gwmem.h
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:3k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * gwmem.h
  3.  *
  4.  * This is a simple malloc()-wrapper. It does not return NULLs but
  5.  * instead panics.
  6.  *
  7.  * We have two wrappers. One that just checks for allocation failures and
  8.  * panics if they happen and one that tries to find allocation problems,
  9.  * such as using an area after it has been freed.
  10.  *
  11.  * Kalle Marjola
  12.  * Lars Wirzenius
  13.  */
  14. #ifndef GWMEM_H
  15. #define GWMEM_H
  16. void *gw_native_noop(void *ptr);
  17. void gw_native_init(void);
  18. void gw_native_check_leaks(void);
  19. void *gw_native_malloc(size_t size);
  20. void *gw_native_realloc(void *ptr, size_t size);
  21. void gw_native_free(void *ptr);
  22. char *gw_native_strdup(const char *str);
  23. void gw_native_shutdown(void);
  24. void gw_check_init_mem(int slow_flag);
  25. void gw_check_check_leaks(void);
  26. void *gw_check_malloc(size_t size, 
  27. const char *filename, long line, const char *function);
  28. void *gw_check_realloc(void *p, size_t size, 
  29. const char *filename, long line, const char *function);
  30. void  gw_check_free(void *p, 
  31. const char *filename, long line, const char *function);
  32. char *gw_check_strdup(const char *str, 
  33. const char *filename, long line, const char *function);
  34. int gw_check_is_allocated(void *p);
  35. long gw_check_area_size(void *p);
  36. void *gw_check_claim_area(void *p,
  37. const char *filename, long line, const char *function);
  38. void gw_check_shutdown(void);
  39. /*
  40.  * "slow" == "checking" with a small variation.
  41.  */
  42. #if USE_GWMEM_SLOW
  43. #define USE_GWMEM_CHECK 1
  44. #endif
  45. #if USE_GWMEM_NATIVE
  46. /*
  47.  * The `native' wrapper.
  48.  */
  49. #define gw_init_mem()
  50. #define gw_check_leaks()
  51. #define gw_malloc(size) (gw_native_malloc(size))
  52. #define gw_realloc(ptr, size) (gw_native_realloc(ptr, size))
  53. #define gw_free(ptr) (gw_native_free(ptr))
  54. #define gw_strdup(str) (gw_native_strdup(str))
  55. #define gw_assert_allocated(ptr, file, line, function)
  56. #define gw_claim_area(ptr) (gw_native_noop(ptr))
  57. #define gw_claim_area_for(ptr, file, line, func) (gw_native_noop(ptr))
  58. #define gwmem_shutdown()
  59. #define gwmem_type() (octstr_imm("native"))
  60. #elif USE_GWMEM_CHECK
  61. /*
  62.  * The `check' wrapper.
  63.  */
  64. #ifdef USE_GWMEM_SLOW
  65. #define gw_init_mem() (gw_check_init_mem(1))
  66. #define gwmem_type() (octstr_imm("slow"))
  67. #else
  68. #define gw_init_mem() (gw_check_init_mem(0))
  69. #define gwmem_type() (octstr_imm("checking"))
  70. #endif
  71. #define gw_check_leaks() (gw_check_check_leaks())
  72. #define gw_malloc(size) 
  73. (gw_check_malloc(size, __FILE__, __LINE__, __func__))
  74. #define gw_realloc(ptr, size) 
  75. (gw_check_realloc(ptr, size, __FILE__, __LINE__, __func__))
  76. #define gw_free(ptr) 
  77. (gw_check_free(ptr, __FILE__, __LINE__, __func__))
  78. #define gw_strdup(str) 
  79. (gw_check_strdup(str, __FILE__, __LINE__, __func__))
  80. #define gw_assert_allocated(ptr, file, line, function) 
  81. (gw_assert_place(gw_check_is_allocated(ptr), file, line, function))
  82. #define gw_claim_area(ptr) 
  83. (gw_check_claim_area(ptr, __FILE__, __LINE__, __func__))
  84. #define gw_claim_area_for(ptr, file, line, func) 
  85. (gw_check_claim_area(ptr, file, line, func))
  86. #define gwmem_shutdown() (gw_check_shutdown())
  87. #else
  88. /*
  89.  * Unknown wrapper. Oops.
  90.  */
  91. #error "Unknown malloc wrapper."
  92. #endif
  93. /*
  94.  * Make sure no-one uses the unwrapped functions by mistake.
  95.  */
  96. #define malloc(n) do_not_call_malloc_directly
  97. #define calloc(a, b) do_not_use_calloc
  98. #define realloc(p, n) do_not_call_realloc_directly
  99. #define free(p)      do_not_call_free_directly
  100. #endif