nc_alloc.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /****************************************************************************
  2. * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. *
  3. * *
  4. * Permission is hereby granted, free of charge, to any person obtaining a *
  5. * copy of this software and associated documentation files (the *
  6. * "Software"), to deal in the Software without restriction, including *
  7. * without limitation the rights to use, copy, modify, merge, publish, *
  8. * distribute, distribute with modifications, sublicense, and/or sell *
  9. * copies of the Software, and to permit persons to whom the Software is *
  10. * furnished to do so, subject to the following conditions: *
  11. * *
  12. * The above copyright notice and this permission notice shall be included *
  13. * in all copies or substantial portions of the Software. *
  14. * *
  15. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *
  16. * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *
  17. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *
  18. * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
  19. * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
  20. * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *
  21. * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *
  22. * *
  23. * Except as contained in this notice, the name(s) of the above copyright *
  24. * holders shall not be used in advertising or otherwise to promote the *
  25. * sale, use or other dealings in this Software without prior written *
  26. * authorization. *
  27. ****************************************************************************/
  28. /****************************************************************************
  29. * Author: Thomas E. Dickey 1996-on *
  30. ****************************************************************************/
  31. /* $Id: nc_alloc.h,v 1.16 2008/09/27 22:30:33 tom Exp $ */
  32. #ifndef NC_ALLOC_included
  33. #define NC_ALLOC_included 1
  34. #ifdef __cplusplus
  35. extern "C" {
  36. #endif
  37. #if HAVE_LIBDMALLOC
  38. #include <string.h>
  39. #undef strndup /* workaround for #define in GLIBC 2.7 */
  40. #include <dmalloc.h> /* Gray Watson's library */
  41. #else
  42. #undef HAVE_LIBDMALLOC
  43. #define HAVE_LIBDMALLOC 0
  44. #endif
  45. #if HAVE_LIBDBMALLOC
  46. #include <dbmalloc.h> /* Conor Cahill's library */
  47. #else
  48. #undef HAVE_LIBDBMALLOC
  49. #define HAVE_LIBDBMALLOC 0
  50. #endif
  51. #if HAVE_LIBMPATROL
  52. #include <mpatrol.h> /* Memory-Patrol library */
  53. #else
  54. #undef HAVE_LIBMPATROL
  55. #define HAVE_LIBMPATROL 0
  56. #endif
  57. #ifndef NO_LEAKS
  58. #define NO_LEAKS 0
  59. #endif
  60. #if HAVE_LIBDBMALLOC || HAVE_LIBDMALLOC || NO_LEAKS
  61. #define HAVE_NC_FREEALL 1
  62. struct termtype;
  63. extern NCURSES_EXPORT(void) _nc_free_and_exit(int) GCC_NORETURN;
  64. extern NCURSES_EXPORT(void) _nc_free_tinfo(int) GCC_NORETURN;
  65. extern NCURSES_EXPORT(void) _nc_free_tic(int) GCC_NORETURN;
  66. extern NCURSES_EXPORT(void) _nc_free_tparm(void);
  67. extern NCURSES_EXPORT(void) _nc_leaks_dump_entry(void);
  68. extern NCURSES_EXPORT(void) _nc_leaks_tic(void);
  69. #define ExitProgram(code) _nc_free_and_exit(code)
  70. #endif
  71. #ifndef HAVE_NC_FREEALL
  72. #define HAVE_NC_FREEALL 0
  73. #endif
  74. #ifndef ExitProgram
  75. #define ExitProgram(code) exit(code)
  76. #endif
  77. /* doalloc.c */
  78. extern NCURSES_EXPORT(void *) _nc_doalloc(void *, size_t);
  79. #if !HAVE_STRDUP
  80. #define strdup _nc_strdup
  81. extern NCURSES_EXPORT(char *) _nc_strdup(const char *);
  82. #endif
  83. /* entries.c */
  84. extern NCURSES_EXPORT(void) _nc_leaks_tinfo(void);
  85. #define typeMalloc(type,elts) (type *)malloc((elts)*sizeof(type))
  86. #define typeCalloc(type,elts) (type *)calloc((elts),sizeof(type))
  87. #define typeRealloc(type,elts,ptr) (type *)_nc_doalloc(ptr, (elts)*sizeof(type))
  88. #ifdef __cplusplus
  89. }
  90. #endif
  91. #endif /* NC_ALLOC_included */