From a0b6f87c4416f50ba238c26e59d842ada37f833d Mon Sep 17 00:00:00 2001 From: Michelle Legrand Date: Thu, 12 Feb 2015 14:45:07 +0100 Subject: [PATCH] evil: add strndup(). Signed-off-by: Cedric BAIL --- src/lib/evil/evil_string.c | 15 +++++++++++++++ src/lib/evil/evil_string.h | 16 ++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/lib/evil/evil_string.c b/src/lib/evil/evil_string.c index 7d7d88c13a..151f8e5a01 100644 --- a/src/lib/evil/evil_string.c +++ b/src/lib/evil/evil_string.c @@ -11,6 +11,21 @@ * */ +char * +strndup(const char *str, size_t n) +{ + size_t slen = strlen(str); + char *ret; + + if (slen > n) slen = n; + ret = malloc (slen + 1); + if (!ret) return NULL; + + if (slen > 0) memcpy(ret, str, slen); + ret[slen] = '\0'; + return ret; +} + int ffs(int i) { int size; diff --git a/src/lib/evil/evil_string.h b/src/lib/evil/evil_string.h index a51475db95..372a4e4253 100644 --- a/src/lib/evil/evil_string.h +++ b/src/lib/evil/evil_string.h @@ -18,6 +18,22 @@ * bit related functions * */ +/** + * @brief Duplicate a string + * + * @param str String to be duplicated + * @param n size of new duplicated string + * @return The strndup() function returns a pointer to the duplicated string, or NULL if insufficient memory was available. + * + * This function returns a pointer to a new string which is a duplicate of the string str, + * but only copies at most n bytes. If str is longer than n, only n bytes are copied, + * and a terminating null byte ('\0') is added. + * + * Conformity: BSD + * + * Supported OS: Windows XP. + */ +EAPI char *strndup(const char *str, size_t n); /** * @brief Return the position of the first (least significant) bit set in a word