From f253f5e3d606702688deecea2162f1c5289d277c Mon Sep 17 00:00:00 2001 From: Jack Jamison Date: Wed, 22 Jul 2026 17:27:04 -0400 Subject: actually download file to correct location --- snag/src/util.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'snag/src/util.c') diff --git a/snag/src/util.c b/snag/src/util.c index e79fd34..79c4b17 100644 --- a/snag/src/util.c +++ b/snag/src/util.c @@ -78,7 +78,49 @@ char* vastrcat_(int dummy, ...) { char* output = malloc(len + 1); if (!output) return NULL; char* p = output; + while ((arg = va_arg(args2, char*))) { + size_t alen = strlen(arg); + memcpy(p, arg, alen); + p += alen; + } + output[len] = '\0'; + va_end(args2); + + return output; +} + +char* join_path_(int dummy, ...) { + + va_list args; + va_list args2; + va_start(args, dummy); + va_copy(args2, args); + + // note(jqj): some path joining libraries reset if they encounter an + // absolute path, we could implement that easily, but I'm not + // sure about it + + // get len of output path + size_t len = 0; + char* arg = NULL; + int i = 0; while ((arg = va_arg(args, char*))) { + if (i > 0) len += 1; + len += strlen(arg) + 1; + ++i; + } + va_end(args); + + // allocate and build output + char* output = malloc(len + 1); + if (!output) return NULL; + char* p = output; + while ((arg = va_arg(args2, char*))) { + if (p != output) { + // add slash before every part except the first + *p = '/'; + ++p; + } size_t alen = strlen(arg); memcpy(p, arg, alen); p += alen; -- cgit v1.2.3