aboutsummaryrefslogtreecommitdiff
path: root/snag
diff options
context:
space:
mode:
Diffstat (limited to 'snag')
-rw-r--r--snag/main.c5
-rw-r--r--snag/makefile2
-rw-r--r--snag/util.c15
-rw-r--r--snag/util.h6
4 files changed, 27 insertions, 1 deletions
diff --git a/snag/main.c b/snag/main.c
index c3fc47a..eff1f2f 100644
--- a/snag/main.c
+++ b/snag/main.c
@@ -1,11 +1,16 @@
#include <stdio.h>
#include "pkg_db.h"
+#include "util.h"
void subcmd_install(char* pkgs[], size_t count);
int main(int argc, char* argv[]) {
+ char buf[4096];
+ vstrcat(buf, "this ", "is", " a", " te", "st");
+ fprintf(stderr, "buf: %s\n", buf);
+
// run install subcommand with each argument as a package
subcmd_install(argv+1, argc-1);
diff --git a/snag/makefile b/snag/makefile
index b44020f..7af765e 100644
--- a/snag/makefile
+++ b/snag/makefile
@@ -3,7 +3,7 @@ CFLAGS = -Wall -g
TARGET = snag
-SRCS = main.c pkg_db.c
+SRCS = main.c pkg_db.c util.c
OBJS = $(SRCS:.c=.o)
.SILENT: $(OBJS) $(TARGET)
diff --git a/snag/util.c b/snag/util.c
new file mode 100644
index 0000000..c4137f6
--- /dev/null
+++ b/snag/util.c
@@ -0,0 +1,15 @@
+#include <stdarg.h>
+#include <string.h>
+
+void vstrcat_(char* dest, ...) {
+ va_list args;
+ va_start(args, dest);
+ while (1) {
+ char* arg = va_arg(args, char*);
+ if (!arg) break;
+ memcpy(dest, arg, strlen(arg));
+ dest += strlen(arg);
+ }
+ va_end(args);
+ *dest = 0;
+}
diff --git a/snag/util.h b/snag/util.h
new file mode 100644
index 0000000..88906cc
--- /dev/null
+++ b/snag/util.h
@@ -0,0 +1,6 @@
+#ifndef UTIL_H
+#define UTIL_H
+#include <stdlib.h>
+#define vstrcat(dest, ...) vstrcat_(dest, __VA_ARGS__, NULL)
+void vstrcat_(char* dest, ...);
+#endif // UTIL_H