From e4713bf45dc95aa4a26097a8a3d4ff2686633ba1 Mon Sep 17 00:00:00 2001 From: Nedko Arnaudov Date: Mon, 20 Sep 2010 00:22:19 +0300 Subject: [PATCH] new function - catdupv() --- common/catdup.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ common/catdup.h | 1 + 2 files changed, 50 insertions(+) diff --git a/common/catdup.c b/common/catdup.c index 18a0e204..91dcbef1 100644 --- a/common/catdup.c +++ b/common/catdup.c @@ -25,6 +25,9 @@ */ #include "../common.h" + +#include + #include "catdup.h" char * catdup(const char * s1, const char * s2) @@ -104,3 +107,49 @@ char * catdup4(const char * s1, const char * s2, const char * s3, const char * s return buffer; } + +char * catdupv(const char * s1, const char * s2, ...) +{ + va_list ap; + const char * str; + size_t len; + char * buffer; + char * p; + + len = strlen(s1) + strlen(s2); + va_start(ap, s2); + while ((str = va_arg(ap, const char *)) != NULL) + { + len += strlen(str); + } + va_end(ap); + len++; + + buffer = malloc(len); + if (buffer == NULL) + { + log_error("malloc(%zu) failed.", len); + return NULL; + } + + len = strlen(s1); + memcpy(buffer, s1, len); + p = buffer + len; + + len = strlen(s2); + memcpy(p, s2, len); + p += len; + + va_start(ap, s2); + while ((str = va_arg(ap, const char *)) != NULL) + { + len = strlen(str); + memcpy(p, str, len); + p += len; + } + va_end(ap); + + *p = 0; + + return buffer; +} diff --git a/common/catdup.h b/common/catdup.h index 86e196a0..eb2321c2 100644 --- a/common/catdup.h +++ b/common/catdup.h @@ -30,5 +30,6 @@ char * catdup(const char * s1, const char * s2); char * catdup3(const char * s1, const char * s2, const char * s3); char * catdup4(const char * s1, const char * s2, const char * s3, const char * s4); +char * catdupv(const char * s1, const char * s2, ...); #endif /* #ifndef CATDUP_H__D42302F1_4D96_4EE4_AC09_E97ED5748277__INCLUDED */