From 15b4eb609fb43cd5c503abd0a4364a85e3f6308d Mon Sep 17 00:00:00 2001 From: "Steffen \"Daode\" Nurpmeso" Date: Sat, 13 Oct 2012 16:14:06 +0200 Subject: [PATCH] Add str_concat_csvl() --- extern.h | 2 ++ strings.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/extern.h b/extern.h index f153ca19..f2da0704 100644 --- a/extern.h +++ b/extern.h @@ -542,6 +542,8 @@ char *savestrbuf(const char *sbuf, size_t sbuf_len); char *save2str(const char *str, const char *old); char *savecat(const char *s1, const char *s2); +struct str *str_concat_csvl(struct str *self, ...); + /* temp.c */ FILE *Ftemp(char **fn, char *prefix, char *mode, int bits, int register_file); void Ftfree(char **fn); diff --git a/strings.c b/strings.c index 09f7272c..c8023580 100644 --- a/strings.c +++ b/strings.c @@ -48,6 +48,8 @@ #include "rcv.h" #include "extern.h" +#include + /* * Allocate size more bytes of space and return the address of the * first byte to the caller. An even number of bytes are always @@ -197,3 +199,29 @@ savecat(const char *s1, const char *s2) *np = '\0'; return ns; } + +struct str * +str_concat_csvl(struct str *self, ...) +{ + va_list vl; + size_t l; + char const*cs; + + va_start(vl, self); + for (l = 0; (cs = va_arg(vl, char const*)) != NULL;) + l += strlen(cs); + va_end(vl); + + self->l = l; + self->s = salloc(l + 1); + + va_start(vl, self); + for (l = 0; (cs = va_arg(vl, char const*)) != NULL;) { + size_t i = strlen(cs); + memcpy(self->s + l, cs, i); + l += i; + } + self->s[l] = '\0'; + va_end(vl); + return (self); +} -- 2.11.4.GIT