From b9f6871f1b7d61d309eb14914a854ec56e495145 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Tue, 12 Sep 2017 10:07:14 -0700 Subject: [PATCH] ircd: Add string_view strlcat(). --- include/ircd/lexical.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/include/ircd/lexical.h b/include/ircd/lexical.h index 68092dfeb..7897b2dc0 100644 --- a/include/ircd/lexical.h +++ b/include/ircd/lexical.h @@ -602,6 +602,25 @@ ircd::strlcat(char *const &dest, } #endif +inline size_t +ircd::strlcat(char *const &dest, + const string_view &src, + const size_t &max) +{ + if(!max) + return 0; + + const ssize_t dsize(strnlen(dest, max)); + const ssize_t ssize(src.size()); + const ssize_t ret(dsize + ssize); + const ssize_t remain(max - dsize); + const ssize_t cpsz(ssize >= remain? remain - 1 : ssize); + char *const ptr(dest + dsize); + memcpy(ptr, src.data(), cpsz); + ptr[cpsz] = '\0'; + return ret; +} + struct ircd::iless { using is_transparent = std::true_type;