From: Thierry Reding Date: Mon, 15 Apr 2019 09:32:14 +0000 (+0200) Subject: lib: Implement strndup() X-Git-Tag: v2019.07-rc4~4^2~24 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=0c4e2658e8e8489956e48a6c9842c5d21b9593fe;p=oweals%2Fu-boot.git lib: Implement strndup() Signed-off-by: Thierry Reding Signed-off-by: Tom Warren --- diff --git a/include/linux/string.h b/include/linux/string.h index 3606620739..5d63be4ce5 100644 --- a/include/linux/string.h +++ b/include/linux/string.h @@ -94,6 +94,7 @@ size_t strcspn(const char *s, const char *reject); #ifndef __HAVE_ARCH_STRDUP extern char * strdup(const char *); #endif +extern char * strndup(const char *, size_t); #ifndef __HAVE_ARCH_STRSWAB extern char * strswab(const char *); #endif diff --git a/lib/string.c b/lib/string.c index af17c16f61..9b779ddc3b 100644 --- a/lib/string.c +++ b/lib/string.c @@ -326,6 +326,29 @@ char * strdup(const char *s) } #endif +char * strndup(const char *s, size_t n) +{ + size_t len; + char *new; + + if (s == NULL) + return NULL; + + len = strlen(s); + + if (n < len) + len = n; + + new = malloc(len + 1); + if (new == NULL) + return NULL; + + strncpy(new, s, len); + new[len] = '\0'; + + return new; +} + #ifndef __HAVE_ARCH_STRSPN /** * strspn - Calculate the length of the initial substring of @s which only