From 55c8fc92a92d0c105e8b09df178ef01421d49152 Mon Sep 17 00:00:00 2001
From: Russell Bryant <russell@russellbryant.com>
Date: Fri, 13 Jan 2006 18:38:55 +0000
Subject: [PATCH] Various cleanups from comments in an email from Luigi Rizzo. 
 Thank you! - Use a cleaner syntax for declaring the allocation macros - Fix
 return value for ast_strdup/ast_strndup - remove safe_strdup from app_macro,
 since ast_strup does the same thing - fix a place in app_queue where
 ast_calloc+strncpy was used instead of   ast_strdup.  If you are helping out
 with these conversions, please watch out   for other places where this is
 done. - add a note to the coding guidelines about the fix to app_queue

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@8065 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 apps/app_macro.c         | 13 ++++---------
 apps/app_queue.c         |  3 +--
 doc/CODING-GUIDELINES    |  4 ++++
 include/asterisk/utils.h | 24 +++++++-----------------
 4 files changed, 16 insertions(+), 28 deletions(-)

diff --git a/apps/app_macro.c b/apps/app_macro.c
index 4b88e15944..63cf464747 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 669e25d867..06aebe7241 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 7e4679be72..e64bbd3450 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 ed842e1b78..9c09fe8daf 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;
 
-- 
GitLab