From 8802e55c260e3c595c5bf584c8cb823768e51d06 Mon Sep 17 00:00:00 2001
From: "David M. Lee" <dlee@respoke.io>
Date: Wed, 27 Jul 2016 09:56:29 -0500
Subject: [PATCH] Replace strdupa with more portable ast_strdupa

The strdupa function is a GNU extension, and not widely portable. We
have an ast_strdupa function used within Asterisk which is preferred.
I pulled the definition up from menuselect.c into the menuselect.h
header file so it can be shared across menuselect.

Change-Id: I9593c97f78386b47dc1e83201e80cb2f62b36c2e
---
 menuselect/menuselect.c        | 12 ------------
 menuselect/menuselect.h        | 12 ++++++++++++
 menuselect/menuselect_curses.c |  2 +-
 3 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/menuselect/menuselect.c b/menuselect/menuselect.c
index efae311bb7..f6a7fb39b2 100644
--- a/menuselect/menuselect.c
+++ b/menuselect/menuselect.c
@@ -103,18 +103,6 @@ struct dep_file {
 };
 AST_LIST_HEAD_NOLOCK_STATIC(deps_file, dep_file);
 
-#if !defined(ast_strdupa) && defined(__GNUC__)
-#define ast_strdupa(s)                                                    \
-	(__extension__                                                    \
-	({                                                                \
-		const char *__old = (s);                                  \
-		size_t __len = strlen(__old) + 1;                         \
-		char *__new = __builtin_alloca(__len);                    \
-		memcpy (__new, __old, __len);                             \
-		__new;                                                    \
-	}))
-#endif
-
 /*! \brief return a pointer to the first non-whitespace character */
 static inline char *skip_blanks(char *str)
 {
diff --git a/menuselect/menuselect.h b/menuselect/menuselect.h
index 7b3fe26567..328ac9a0ab 100644
--- a/menuselect/menuselect.h
+++ b/menuselect/menuselect.h
@@ -162,4 +162,16 @@ static inline int strlen_zero(const char *s)
 	return (!s || (*s == '\0'));
 }
 
+#if !defined(ast_strdupa) && defined(__GNUC__)
+#define ast_strdupa(s)                                                    \
+	(__extension__                                                    \
+	({                                                                \
+		const char *__old = (s);                                  \
+		size_t __len = strlen(__old) + 1;                         \
+		char *__new = __builtin_alloca(__len);                    \
+		memcpy (__new, __old, __len);                             \
+		__new;                                                    \
+	}))
+#endif
+
 #endif /* MENUSELECT_H */
diff --git a/menuselect/menuselect_curses.c b/menuselect/menuselect_curses.c
index e79957485f..260cf69a73 100644
--- a/menuselect/menuselect_curses.c
+++ b/menuselect/menuselect_curses.c
@@ -211,7 +211,7 @@ static void display_mem_info(WINDOW *menu, struct member *mem, int start_y, int
 
 	if (mem->displayname) {
 		char buf[maxlen + 1];
-		char *displayname = strdupa(mem->displayname);
+		char *displayname = ast_strdupa(mem->displayname);
 		char *word;
 		int current_line = 1;
 		int new_line = 1;
-- 
GitLab