aboutsummaryrefslogtreecommitdiff
path: root/strcon.c
diff options
context:
space:
mode:
Diffstat (limited to 'strcon.c')
-rw-r--r--strcon.c45
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;
+}