From: Wolfgang Bumiller Date: Wed, 18 Jul 2018 10:43:37 +0000 (+0200) Subject: utils: add must_concat helper X-Git-Tag: lxc-3.1.0~192^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb5c2e6aeef233c4f3349d182e5c25315cca8de8;p=thirdparty%2Flxc.git utils: add must_concat helper Signed-off-by: Wolfgang Bumiller --- diff --git a/src/lxc/utils.c b/src/lxc/utils.c index bad355265..82c24c941 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c @@ -2433,6 +2433,30 @@ int run_command(char *buf, size_t buf_size, int (*child_fn)(void *), void *args) return fret; } +char *must_concat(const char *first, ...) +{ + va_list args; + char *cur, *dest; + size_t cur_len, it_len; + + dest = must_copy_string(first); + cur_len = it_len = strlen(first); + + va_start(args, first); + while ((cur = va_arg(args, char *)) != NULL) { + it_len = strlen(cur); + + dest = must_realloc(dest, cur_len + it_len + 1); + + (void)memcpy(dest + cur_len, cur, it_len); + cur_len += it_len; + } + va_end(args); + + dest[cur_len] = 0; + return dest; +} + char *must_make_path(const char *first, ...) { va_list args; diff --git a/src/lxc/utils.h b/src/lxc/utils.h index 46ef28504..f09bc9018 100644 --- a/src/lxc/utils.h +++ b/src/lxc/utils.h @@ -568,6 +568,7 @@ extern int run_command(char *buf, size_t buf_size, int (*child_fn)(void *), /* Concatenate all passed-in strings into one path. Do not fail. If any piece * is not prefixed with '/', add a '/'. */ +__attribute__((sentinel)) extern char *must_concat(const char *first, ...); __attribute__((sentinel)) extern char *must_make_path(const char *first, ...); __attribute__((sentinel)) extern char *must_append_path(char *first, ...);