gnunet

Main GNUnet Logic
Log | Files | Refs | Submodules | README | LICENSE

commit 0e7c93c3a0a3aa966503a8ae4caf3a21914e4126
parent 06f8f6b3f76f69285240b056dd78697faddda32f
Author: lurchi <lurchi@strangeplace.net>
Date:   Thu, 27 Jun 2019 10:49:09 +0200

introduce GNUNET_strlcpy

Diffstat:
Msrc/include/gnunet_strings_lib.h | 20+++++++++++++++++++-
Msrc/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 @@ -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 @@ -203,6 +203,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'. */ struct ConversionTable