From 191d45306387128f1dc6390e0b00b1d2d3b9f0c2 Mon Sep 17 00:00:00 2001 From: dongjiuzhu1 Date: Fri, 30 Dec 2022 22:01:06 +0800 Subject: [PATCH] string/strdupa: support strdupa strndupa refs:https://sites.uclouvain.be/SystInfo/manpages/man3/strdup.3.html Signed-off-by: dongjiuzhu1 --- include/string.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/include/string.h b/include/string.h index f876ae8f8c5..965acf6ee57 100644 --- a/include/string.h +++ b/include/string.h @@ -29,15 +29,25 @@ #include #include +#include /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ #define strcoll_l(s1, s2, l) strcoll(s1, s2) +#define strdupa(x) strcpy(alloca(strlen(x) + 1), x) #define strerror_l(e, l) strerror(e) #define strxfrm_l(s1, s2, n, l) strxfrm(s1, s2, n) +#define strndupa(x, l) ({ \ + FAR const char *__old = (x); \ + size_t __len = strnlen(__old, (l)); \ + FAR char *__new = alloca(__len + 1); \ + __new[__len] = '\0'; \ + (FAR char *)memcpy(__new, __old, __len); \ +}) + /**************************************************************************** * Public Function Prototypes ****************************************************************************/