summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--codecs/lpc10/lpcini.c2
-rwxr-xr-xcontrib/scripts/get_mp3_source.sh8
-rw-r--r--include/asterisk/astmm.h87
-rw-r--r--main/ast_expr2.c2
-rw-r--r--main/ast_expr2.y2
-rw-r--r--main/ast_expr2f.c2
-rw-r--r--main/astmm.c11
-rw-r--r--main/hashtab.c2
-rw-r--r--res/ael/ael.flex2
-rw-r--r--res/ael/ael.tab.c2
-rw-r--r--res/ael/ael.y2
-rw-r--r--res/ael/ael_lex.c2
-rw-r--r--res/ael/pval.c2
-rw-r--r--res/res_fax_spandsp.c12
-rw-r--r--res/snmp/agent.c2
-rw-r--r--utils/extconf.c2
16 files changed, 98 insertions, 44 deletions
diff --git a/codecs/lpc10/lpcini.c b/codecs/lpc10/lpcini.c
index 8efb64068..ea68176e3 100644
--- a/codecs/lpc10/lpcini.c
+++ b/codecs/lpc10/lpcini.c
@@ -34,7 +34,7 @@ Some OSS fixes and a few lpc changes to make it actually work
-lf2c -lm (in that order)
*/
-#define WRAP_LIBC_MALLOC
+#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
#include "f2c.h"
diff --git a/contrib/scripts/get_mp3_source.sh b/contrib/scripts/get_mp3_source.sh
index 860e2bc02..6d984659d 100755
--- a/contrib/scripts/get_mp3_source.sh
+++ b/contrib/scripts/get_mp3_source.sh
@@ -7,8 +7,8 @@ if [ -f addons/mp3/mpg123.h ]; then
echo "***"
# Manually patch interface.c if not done yet.
- if ! grep -q WRAP_LIBC_MALLOC addons/mp3/interface.c; then
- sed -i -e '/#include "asterisk.h"/i#define WRAP_LIBC_MALLOC' \
+ if ! grep -q ASTMM_LIBC addons/mp3/interface.c; then
+ sed -i -e '/#include "asterisk.h"/i#define ASTMM_LIBC ASTMM_REDIRECT' \
addons/mp3/interface.c
fi
@@ -18,8 +18,8 @@ fi
svn export http://svn.digium.com/svn/thirdparty/mp3/trunk addons/mp3 $@
# Manually patch interface.c if not done yet.
-if ! grep -q WRAP_LIBC_MALLOC addons/mp3/interface.c; then
- sed -i -e '/#include "asterisk.h"/i#define WRAP_LIBC_MALLOC' \
+if ! grep -q ASTMM_LIBC addons/mp3/interface.c; then
+ sed -i -e '/#include "asterisk.h"/i#define ASTMM_LIBC ASTMM_REDIRECT' \
addons/mp3/interface.c
fi
diff --git a/include/asterisk/astmm.h b/include/asterisk/astmm.h
index 1d778d4c5..6c9a8aeee 100644
--- a/include/asterisk/astmm.h
+++ b/include/asterisk/astmm.h
@@ -44,16 +44,6 @@ extern "C" {
#include <stdio.h>
#include <stdarg.h>
-/* Undefine any macros */
-#undef malloc
-#undef calloc
-#undef realloc
-#undef strdup
-#undef strndup
-#undef asprintf
-#undef vasprintf
-#undef free
-
void *ast_std_malloc(size_t size);
void *ast_std_calloc(size_t nmemb, size_t size);
void *ast_std_realloc(void *ptr, size_t size);
@@ -74,9 +64,72 @@ int __ast_vasprintf(char **strp, const char *format, va_list ap, const char *fil
void __ast_mm_init_phase_1(void);
void __ast_mm_init_phase_2(void);
-/* Redefine libc malloc to our own versions */
+/*!
+ * \brief ASTMM_LIBC can be defined to control the meaning of standard allocators.
+ *
+ * \note The standard allocators effected by this compiler define are:
+ * malloc, calloc, realloc, strdup, strndup, asprintf, vasprintf and free.
+ *
+ * @{
+ */
+
+/*!
+ * \brief Produce compiler errors if standard allocators are used.
+ *
+ * \note This is the default option, and in most cases the correct option.
+ * Any use of standard allocators will cause an error, even if those uses
+ * are in unused static inline header functions.
+ */
+#define ASTMM_BLOCK 0
+
+/*!
+ * \brief Redirect standard allocators to use Asterisk functions.
+ *
+ * \note This option is used in some cases instead of changing the
+ * existing source to use Asterisk functions. New code should
+ * generally avoid this option, except where it's needed to work
+ * with situations where switching the code is unreasonable, such
+ * as output from code generators that are hard coded to use
+ * standard functions.
+ */
+#define ASTMM_REDIRECT 1
+
+/*!
+ * \brief Standard allocators are used directly.
+ *
+ * \note This option is needed when including 3rd party headers with calls
+ * to standard allocators from inline functions. Using ASTMM_REDIRECT in
+ * this situation could result in an object being allocated by malloc and
+ * freed by ast_free, or the reverse.
+ */
+#define ASTMM_IGNORE 2
+
+/*!
+ * }@
+ */
+
+#if !defined(ASTMM_LIBC)
+/* BLOCK libc allocators by default. */
+#define ASTMM_LIBC ASTMM_BLOCK
+#endif
-#ifdef WRAP_LIBC_MALLOC
+#if ASTMM_LIBC == ASTMM_IGNORE
+/* Don't touch the libc functions. */
+#else
+
+/* Undefine any macros */
+#undef malloc
+#undef calloc
+#undef realloc
+#undef strdup
+#undef strndup
+#undef asprintf
+#undef vasprintf
+#undef free
+
+#if ASTMM_LIBC == ASTMM_REDIRECT
+
+/* Redefine libc functions to our own versions */
#define calloc(a,b) \
__ast_calloc(a,b,__FILE__, __LINE__, __PRETTY_FUNCTION__)
#define malloc(a) \
@@ -93,7 +146,10 @@ void __ast_mm_init_phase_2(void);
__ast_asprintf(__FILE__, __LINE__, __PRETTY_FUNCTION__, a, b, c)
#define vasprintf(a,b,c) \
__ast_vasprintf(a,b,c,__FILE__, __LINE__, __PRETTY_FUNCTION__)
-#else
+
+#elif ASTMM_LIBC == ASTMM_BLOCK
+
+/* Redefine libc functions to cause compile errors */
#define calloc(a,b) \
Do_not_use_calloc__use_ast_calloc->fail(a,b)
#define malloc(a) \
@@ -110,6 +166,11 @@ void __ast_mm_init_phase_2(void);
Do_not_use_asprintf__use_ast_asprintf->fail(a,b,c)
#define vasprintf(a,b,c) \
Do_not_use_vasprintf__use_ast_vasprintf->fail(a,b,c)
+
+#else
+#error "Unacceptable value for the macro ASTMM_LIBC"
+#endif
+
#endif
/* Provide our own definitions */
diff --git a/main/ast_expr2.c b/main/ast_expr2.c
index 84a3d7b97..d41072d6e 100644
--- a/main/ast_expr2.c
+++ b/main/ast_expr2.c
@@ -91,7 +91,7 @@
* $FreeBSD: src/bin/expr/expr.y,v 1.16 2000/07/22 10:59:36 se Exp $
*/
-#define WRAP_LIBC_MALLOC
+#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
#include <sys/types.h>
diff --git a/main/ast_expr2.y b/main/ast_expr2.y
index 8a151679d..762e83d84 100644
--- a/main/ast_expr2.y
+++ b/main/ast_expr2.y
@@ -12,7 +12,7 @@
* $FreeBSD: src/bin/expr/expr.y,v 1.16 2000/07/22 10:59:36 se Exp $
*/
-#define WRAP_LIBC_MALLOC
+#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
#include <sys/types.h>
diff --git a/main/ast_expr2f.c b/main/ast_expr2f.c
index c2d4e00a4..c6a1b9735 100644
--- a/main/ast_expr2f.c
+++ b/main/ast_expr2f.c
@@ -1,4 +1,4 @@
-#define WRAP_LIBC_MALLOC
+#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
#line 2 "ast_expr2f.c"
diff --git a/main/astmm.c b/main/astmm.c
index a4d5602ce..8260460ab 100644
--- a/main/astmm.c
+++ b/main/astmm.c
@@ -28,6 +28,7 @@
<support_level>core</support_level>
***/
+#define ASTMM_LIBC ASTMM_IGNORE
#include "asterisk.h"
#if defined(__AST_DEBUG_MALLOC)
@@ -61,16 +62,6 @@ enum func_type {
FUNC_ASPRINTF
};
-/* Undefine all our macros */
-#undef malloc
-#undef calloc
-#undef realloc
-#undef strdup
-#undef strndup
-#undef free
-#undef vasprintf
-#undef asprintf
-
#define FENCE_MAGIC 0xfeedbabe /*!< Allocated memory high/low fence overwrite check. */
#define FREED_MAGIC 0xdeaddead /*!< Freed memory wipe filler. */
#define MALLOC_FILLER 0x55 /*!< Malloced memory filler. Must not be zero. */
diff --git a/main/hashtab.c b/main/hashtab.c
index 27a700a9d..c08880c69 100644
--- a/main/hashtab.c
+++ b/main/hashtab.c
@@ -26,7 +26,7 @@
<support_level>core</support_level>
***/
-#define WRAP_LIBC_MALLOC
+#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
ASTERISK_REGISTER_FILE()
diff --git a/res/ael/ael.flex b/res/ael/ael.flex
index a412eaf34..b1b2bd76d 100644
--- a/res/ael/ael.flex
+++ b/res/ael/ael.flex
@@ -68,7 +68,7 @@
%option bison-locations
%{
-#define WRAP_LIBC_MALLOC
+#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
ASTERISK_REGISTER_FILE()
diff --git a/res/ael/ael.tab.c b/res/ael/ael.tab.c
index f146ffb09..9f1f19bb6 100644
--- a/res/ael/ael.tab.c
+++ b/res/ael/ael.tab.c
@@ -99,7 +99,7 @@
*
*/
-#define WRAP_LIBC_MALLOC
+#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
ASTERISK_REGISTER_FILE()
diff --git a/res/ael/ael.y b/res/ael/ael.y
index 5ab9c969f..e5c1655c5 100644
--- a/res/ael/ael.y
+++ b/res/ael/ael.y
@@ -22,7 +22,7 @@
*
*/
-#define WRAP_LIBC_MALLOC
+#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
ASTERISK_REGISTER_FILE()
diff --git a/res/ael/ael_lex.c b/res/ael/ael_lex.c
index c5eba92b7..a7a20aa60 100644
--- a/res/ael/ael_lex.c
+++ b/res/ael/ael_lex.c
@@ -1,4 +1,4 @@
-#define WRAP_LIBC_MALLOC
+#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
#line 2 "ael_lex.c"
diff --git a/res/ael/pval.c b/res/ael/pval.c
index d29bbcfbd..d5ea5accf 100644
--- a/res/ael/pval.c
+++ b/res/ael/pval.c
@@ -27,7 +27,7 @@
<support_level>extended</support_level>
***/
-#define WRAP_LIBC_MALLOC
+#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
ASTERISK_REGISTER_FILE()
diff --git a/res/res_fax_spandsp.c b/res/res_fax_spandsp.c
index 42492273d..ddbb17840 100644
--- a/res/res_fax_spandsp.c
+++ b/res/res_fax_spandsp.c
@@ -48,12 +48,8 @@
<support_level>extended</support_level>
***/
-/* Include spandsp headers before asterisk.h so the inline functions can continue using
- * malloc and free, even with MALLOC_DEBUG enabled. */
-#define SPANDSP_EXPOSE_INTERNAL_STRUCTURES
-#include <spandsp.h>
-#include <spandsp/version.h>
-
+/* Needed for spandsp headers */
+#define ASTMM_LIBC ASTMM_IGNORE
#include "asterisk.h"
ASTERISK_REGISTER_FILE()
@@ -69,6 +65,10 @@ ASTERISK_REGISTER_FILE()
#include "asterisk/channel.h"
#include "asterisk/format_cache.h"
+#define SPANDSP_EXPOSE_INTERNAL_STRUCTURES
+#include <spandsp.h>
+#include <spandsp/version.h>
+
#define SPANDSP_FAX_SAMPLES 160
#define SPANDSP_FAX_TIMER_RATE 8000 / SPANDSP_FAX_SAMPLES /* 50 ticks per second, 20ms, 160 samples per second */
#define SPANDSP_ENGAGE_UDPTL_NAT_RETRY 3
diff --git a/res/snmp/agent.c b/res/snmp/agent.c
index bebcee11e..f0e089fb6 100644
--- a/res/snmp/agent.c
+++ b/res/snmp/agent.c
@@ -18,6 +18,8 @@
<support_level>extended</support_level>
***/
+/* Needed for net-snmp headers */
+#define ASTMM_LIBC ASTMM_IGNORE
#include "asterisk.h"
ASTERISK_REGISTER_FILE()
diff --git a/utils/extconf.c b/utils/extconf.c
index 872980172..baca11bf5 100644
--- a/utils/extconf.c
+++ b/utils/extconf.c
@@ -43,7 +43,7 @@
<support_level>extended</support_level>
***/
-#define WRAP_LIBC_MALLOC
+#define ASTMM_LIBC ASTMM_REDIRECT
#include "asterisk.h"
#undef DEBUG_THREADS