X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Fmempool-str.c;h=96bc07dadfeb91ea05a56dc7bf04e6b146b89fa9;hb=86919305a08aa88b3a60c3216752291ba7f0b496;hp=0da43e16c2fa16c9ab078b2337f7c8769b0b73a8;hpb=2860df435bc0ec1601bf2e7eedacc63258b932aa;p=libucw.git diff --git a/lib/mempool-str.c b/lib/mempool-str.c index 0da43e16..96bc07da 100644 --- a/lib/mempool-str.c +++ b/lib/mempool-str.c @@ -22,6 +22,14 @@ mp_strdup(struct mempool *p, char *s) return t; } +void * +mp_memdup(struct mempool *p, void *s, uns len) +{ + void *t = mp_alloc_fast(p, len); + memcpy(t, s, len); + return t; +} + char * mp_multicat(struct mempool *p, ...) { @@ -29,25 +37,27 @@ mp_multicat(struct mempool *p, ...) va_start(args, p); char *x, *y; uns cnt = 0; - a = args; + va_copy(a, args); while (x = va_arg(a, char *)) cnt++; uns *sizes = alloca(cnt * sizeof(uns)); uns len = 1; cnt = 0; - a = args; + va_end(a); + va_copy(a, args); while (x = va_arg(a, char *)) len += sizes[cnt++] = strlen(x); char *buf = mp_alloc_fast_noalign(p, len); y = buf; - a = args; + va_end(a); cnt = 0; - while (x = va_arg(a, char *)) + while (x = va_arg(args, char *)) { memcpy(y, x, sizes[cnt]); y += sizes[cnt++]; } *y = 0; + va_end(args); return buf; }