From 0e7c93c3a0a3aa966503a8ae4caf3a21914e4126 Mon Sep 17 00:00:00 2001 From: lurchi Date: Thu, 27 Jun 2019 10:49:09 +0200 Subject: [PATCH] introduce GNUNET_strlcpy --- src/include/gnunet_strings_lib.h | 20 +++++++++++++++++++- src/util/strings.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/include/gnunet_strings_lib.h b/src/include/gnunet_strings_lib.h index f43567611..db657f54e 100644 --- a/src/include/gnunet_strings_lib.h +++ b/src/include/gnunet_strings_lib.h @@ -541,6 +541,25 @@ GNUNET_STRINGS_get_utf8_args (int argc, char *const **u8argv); +/** + * Like strlcpy but portable. The given string @a src is copied in full length + * (until its null byte). The destination buffer is guaranteed to be + * null-terminated. + * + * to a destination buffer + * and ensures that the destination string is null-terminated. + * + * @param dst destination of the copy + * @param src source of the copy, must be null-terminated + * @param n the length of the string to copy, including its terminating null + * byte + * @return the length of the string that was copied, excluding the terminating + * null byte + */ +size_t +GNUNET_strlcpy(char *dst, const char *src, size_t n); + + /* ***************** IPv4/IPv6 parsing ****************** */ struct GNUNET_STRINGS_PortPolicy @@ -641,7 +660,6 @@ struct GNUNET_STRINGS_IPv6NetworkPolicy * GNUNET_STRINGS_parse_ipv6_policy (const char *routeListX); - #if 0 /* keep Emacsens' auto-indent happy */ { #endif diff --git a/src/util/strings.c b/src/util/strings.c index 2cbdb640b..d69244e83 100644 --- a/src/util/strings.c +++ b/src/util/strings.c @@ -202,6 +202,36 @@ GNUNET_STRINGS_byte_size_fancy (unsigned long long size) } +/** + * Like strlcpy but portable. The given string @a src is copied in full length + * (until its null byte). The destination buffer is guaranteed to be + * null-terminated. + * + * to a destination buffer + * and ensures that the destination string is null-terminated. + * + * @param dst destination of the copy + * @param src source of the copy, must be null-terminated + * @param n the length of the string to copy, including its terminating null + * byte + * @return the length of the string that was copied, excluding the terminating + * null byte + */ +size_t +GNUNET_strlcpy(char *dst, const char *src, size_t n) +{ + size_t ret; + size_t slen; + + GNUNET_assert (0 != n); + ret = strlen (src); + slen = GNUNET_MIN (ret, n - 1); + memcpy (dst, src, slen); + dst[slen] = '\0'; + return ret; +} + + /** * Unit conversion table entry for 'convert_with_table'. */ -- 2.25.1