From bf23b7b8fd39eaca6a05173eaf543e1bce3319ab Mon Sep 17 00:00:00 2001 From: Noam Meltzer Date: Sun, 28 Aug 2016 13:53:24 +0300 Subject: [PATCH] fix strdupa evaulating expression twice calling strdupa with va_arg as its expression caused unexpected behaviour. now the expression is evaulated only once. --- include/string.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/include/string.h b/include/string.h index ff9badb..976faaf 100644 --- a/include/string.h +++ b/include/string.h @@ -85,7 +85,10 @@ size_t strlcpy (char *, const char *, size_t); #endif #ifdef _GNU_SOURCE -#define strdupa(x) strcpy(alloca(strlen(x)+1),x) +#define strdupa(x) (__extension__ ({ \ + const char *__xval = x; \ + strcpy(alloca(strlen(__xval)+1),__xval); \ + })) int strverscmp (const char *, const char *); int strcasecmp_l (const char *, const char *, locale_t); int strncasecmp_l (const char *, const char *, size_t, locale_t); -- 2.7.4