diff options
author | lurchi <lurchi@strangeplace.net> | 2019-06-27 10:49:09 +0200 |
---|---|---|
committer | lurchi <lurchi@strangeplace.net> | 2019-06-27 10:49:09 +0200 |
commit | 0e7c93c3a0a3aa966503a8ae4caf3a21914e4126 (patch) | |
tree | 64ec750ae76bfe9851ee989ece90003d6ee06a42 | |
parent | 06f8f6b3f76f69285240b056dd78697faddda32f (diff) |
introduce GNUNET_strlcpy
-rw-r--r-- | src/include/gnunet_strings_lib.h | 20 | ||||
-rw-r--r-- | src/util/strings.c | 30 |
2 files changed, 49 insertions, 1 deletions
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 @@ -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 |