diff options
Diffstat (limited to 'strcon.c')
-rw-r--r-- | strcon.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/strcon.c b/strcon.c new file mode 100644 index 0000000..0e8c5b2 --- /dev/null +++ b/strcon.c @@ -0,0 +1,45 @@ +#include <stdarg.h> +#include <stdlib.h> +#include <string.h> +#include "strcon.h" + +char *strcon(char *dest, ...) +{ + va_list ap; + va_start(ap, dest); + + const char *src; + while ((src = va_arg(ap, const char*))) { + strcat(dest, src); + } + + va_end(ap); + return dest; +} + +char *astrcon(const char *src1, ...) +{ + va_list ap; + va_start(ap, src1); + + va_list aq; // copy so we can iterate twice + va_copy(aq, ap); + + const char *src2; + size_t size = 1 + strlen(src1); + while ((src2 = va_arg(aq, const char*))) { + size += strlen(src2); + } + + va_end(aq); + + char *dest = malloc(size); + strcat(dest, src1); + + while ((src2 = va_arg(ap, const char*))) { + strcat(dest, src2); + } + + va_end(ap); + return dest; +} |