From ecc06c082036aa93f6810ec21e73610c55f5a57b Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Thu, 30 Dec 2021 14:18:15 +0100 Subject: Initial commit --- std/str.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 std/str.c (limited to 'std/str.c') diff --git a/std/str.c b/std/str.c new file mode 100644 index 0000000..16f756b --- /dev/null +++ b/std/str.c @@ -0,0 +1,30 @@ +#include +#include +#include "../api/vm.h" +#include "../api/str.h" + +UwUVMValue uwu_cat(UwUVMArgs *args) +{ + size_t total_len = 0; + size_t lengths[args->num]; + char *substrs[args->num]; + + for (size_t i = 0; i < args->num; i++) { + substrs[i] = uwustr_get(uwuvm_get_arg(args, i)); + lengths[i] = strlen(substrs[i]); + total_len += lengths[i]; + } + + char result[total_len + 1]; + char *result_ptr = result; + + for (size_t i = 0; i < args->num; i++) { + strcpy(result_ptr, substrs[i]); + free(substrs[i]); + result_ptr += lengths[i]; + } + + *result_ptr = 0; + + return uwustr_create(result); +} -- cgit v1.2.3