From b8657c98f2ccf97f1cbf2cd0fb530c721883425f Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 2 Oct 2024 10:50:36 -0400 Subject: [PATCH] MT#55283 upgrade STR() and STR_DUP() macros Avoids duplicate expansion of macro arguments. Change-Id: I3485313f043fd0284337f94bea31955ccf151fca --- lib/str.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/str.h b/lib/str.h index 51733d9e5..9a3de7dad 100644 --- a/lib/str.h +++ b/lib/str.h @@ -37,13 +37,13 @@ TYPED_GQUEUE(str, str) #define STR_NULL ((str) { NULL, 0 }) #define STR_EMPTY ((str) { "", 0 }) #define STR_CONST(s) ((str) { s, sizeof(s)-1 }) -#define STR(s) ((str) { (char *) (s), (s) ? strlen(s) : 0 }) +#define STR(s) ({ const char *__s = (s); (str) { (char *) (__s), (__s) ? strlen(__s) : 0 }; }) #define STR_PTR(s) (&((str) { (char *) (s), (s) ? strlen(s) : 0 })) #define STR_NC(s) ((str) { (char *) (s), strlen(s) }) #define STR_GS(s) ((str) { (s)->str, (s)->len }) #define STR_LEN(s, len) ((str) { (char *) (s), len }) #define STR_LEN_ASSERT(s, len) ({ assert(sizeof(s) >= len); (str) { (char *) (s), len }; }) -#define STR_DUP(s) ({ size_t __l = strlen(s); (str) { __g_memdup(s, __l + 1), __l }; }) +#define STR_DUP(s) ({ const char *__s = (s); size_t __l = strlen(__s); (str) { __g_memdup(__s, __l + 1), __l }; }) #define STR_CONST_BUF(buf) ((str) { (char *) &buf, sizeof(buf) })