diff --git a/apps/app_macro.c b/apps/app_macro.c index 4b88e1594420a23fe17999479deab923298e0264..63cf464747d5b4011ebf758a21d65f2990efb646 100644 --- a/apps/app_macro.c +++ b/apps/app_macro.c @@ -89,11 +89,6 @@ STANDARD_LOCAL_USER; LOCAL_USER_DECL; -static char *safe_strdup(const char *s) -{ - return s ? strdup(s) : NULL; -} - static int macro_exec(struct ast_channel *chan, void *data) { const char *s; @@ -169,17 +164,17 @@ static int macro_exec(struct ast_channel *chan, void *data) } argc = 1; /* Save old macro variables */ - save_macro_exten = safe_strdup(pbx_builtin_getvar_helper(chan, "MACRO_EXTEN")); + save_macro_exten = ast_strdup(pbx_builtin_getvar_helper(chan, "MACRO_EXTEN")); pbx_builtin_setvar_helper(chan, "MACRO_EXTEN", oldexten); - save_macro_context = safe_strdup(pbx_builtin_getvar_helper(chan, "MACRO_CONTEXT")); + save_macro_context = ast_strdup(pbx_builtin_getvar_helper(chan, "MACRO_CONTEXT")); pbx_builtin_setvar_helper(chan, "MACRO_CONTEXT", oldcontext); - save_macro_priority = safe_strdup(pbx_builtin_getvar_helper(chan, "MACRO_PRIORITY")); + save_macro_priority = ast_strdup(pbx_builtin_getvar_helper(chan, "MACRO_PRIORITY")); snprintf(pc, sizeof(pc), "%d", oldpriority); pbx_builtin_setvar_helper(chan, "MACRO_PRIORITY", pc); - save_macro_offset = safe_strdup(pbx_builtin_getvar_helper(chan, "MACRO_OFFSET")); + save_macro_offset = ast_strdup(pbx_builtin_getvar_helper(chan, "MACRO_OFFSET")); pbx_builtin_setvar_helper(chan, "MACRO_OFFSET", NULL); /* Setup environment for new run */ diff --git a/apps/app_queue.c b/apps/app_queue.c index 669e25d867cefb2ab3c21b5bea38577e21c69c82..06aebe72418a1c34b6f55efbfe6a3c037bc9e8fc 100644 --- a/apps/app_queue.c +++ b/apps/app_queue.c @@ -1709,8 +1709,7 @@ static struct localuser *wait_for_answer(struct queue_ent *qe, struct localuser if (in->cid.cid_ani) { if (o->chan->cid.cid_ani) free(o->chan->cid.cid_ani); - if ((o->chan->cid.cid_ani = ast_calloc(1, strlen(in->cid.cid_ani) + 1))) - strncpy(o->chan->cid.cid_ani, in->cid.cid_ani, strlen(in->cid.cid_ani) + 1); + o->chan->cid.cid_ani = ast_strdup(in->cid.cid_ani); } if (o->chan->cid.cid_rdnis) free(o->chan->cid.cid_rdnis); diff --git a/doc/CODING-GUIDELINES b/doc/CODING-GUIDELINES index 7e4679be722d1f29a217cfcf7130dc0ae0d7d542..e64bbd34505f3175ede6fefef48da24b8a303b3d 100644 --- a/doc/CODING-GUIDELINES +++ b/doc/CODING-GUIDELINES @@ -386,6 +386,10 @@ argument without generating an error. The same code can be written as: newstr = ast_strdup(str); +Furthermore, it is unnecessary to have code that malloc/calloc's for the length +of a string (+1 for the terminating '\0') and then using strncpy to copy the +copy the string into the resulting buffer. This is the exact same thing as +using ast_strdup. * CLI Commands -------------- diff --git a/include/asterisk/utils.h b/include/asterisk/utils.h index ed842e1b786fe365e14522fc9337a243b919e388..9c09fe8dafa709c51d4a39be171d54d7d7d85f0c 100644 --- a/include/asterisk/utils.h +++ b/include/asterisk/utils.h @@ -252,9 +252,7 @@ long int ast_random(void); The argument and return value are the same as malloc() */ #define ast_malloc(len) \ - ({ \ - (_ast_malloc((len), __FILE__, __LINE__, __PRETTY_FUNCTION__)); \ - }) + _ast_malloc((len), __FILE__, __LINE__, __PRETTY_FUNCTION__) AST_INLINE_API( void *_ast_malloc(size_t len, const char *file, int lineno, const char *func), @@ -279,9 +277,7 @@ void *_ast_malloc(size_t len, const char *file, int lineno, const char *func), The arguments and return value are the same as calloc() */ #define ast_calloc(num, len) \ - ({ \ - (_ast_calloc((num), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)); \ - }) + _ast_calloc((num), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__) AST_INLINE_API( void *_ast_calloc(size_t num, size_t len, const char *file, int lineno, const char *func), @@ -306,9 +302,7 @@ void *_ast_calloc(size_t num, size_t len, const char *file, int lineno, const ch The arguments and return value are the same as realloc() */ #define ast_realloc(p, len) \ - ({ \ - (_ast_realloc((p), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)); \ - }) + _ast_realloc((p), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__) AST_INLINE_API( void *_ast_realloc(void *p, size_t len, const char *file, int lineno, const char *func), @@ -337,12 +331,10 @@ void *_ast_realloc(void *p, size_t len, const char *file, int lineno, const char The argument and return value are the same as strdup() */ #define ast_strdup(str) \ - ({ \ - (_ast_strdup((str), __FILE__, __LINE__, __PRETTY_FUNCTION__)); \ - }) + _ast_strdup((str), __FILE__, __LINE__, __PRETTY_FUNCTION__) AST_INLINE_API( -void *_ast_strdup(const char *str, const char *file, int lineno, const char *func), +char *_ast_strdup(const char *str, const char *file, int lineno, const char *func), { char *newstr = NULL; @@ -370,12 +362,10 @@ void *_ast_strdup(const char *str, const char *file, int lineno, const char *fun The arguments and return value are the same as strndup() */ #define ast_strndup(str, len) \ - ({ \ - (_ast_strndup((str), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__)); \ - }) + _ast_strndup((str), (len), __FILE__, __LINE__, __PRETTY_FUNCTION__) AST_INLINE_API( -void *_ast_strndup(const char *str, size_t len, const char *file, int lineno, const char *func), +char *_ast_strndup(const char *str, size_t len, const char *file, int lineno, const char *func), { char *newstr = NULL;