From b6a26390556fe14c3fc9634b291baabeba7ed517 Mon Sep 17 00:00:00 2001 From: Czarek Nakamoto Date: Tue, 10 Mar 2026 08:49:35 +0100 Subject: monero updates --- tests/c/src/utils.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 tests/c/src/utils.c (limited to 'tests/c/src/utils.c') diff --git a/tests/c/src/utils.c b/tests/c/src/utils.c new file mode 100644 index 0000000..9816075 --- /dev/null +++ b/tests/c/src/utils.c @@ -0,0 +1,65 @@ +#include "utils.h" +#include +#include +#include +#include + +char* u_mktemp() { + char pattern[] = "/tmp/monero_c_test_XXXXXXXXX"; + + char *template = malloc(strlen(pattern) + 1); + if (!template) { + perror("malloc failed"); + exit(1); + } + + strcpy(template, pattern); + + if (mkdtemp(template) == NULL) { + perror("mkdtemp failed"); + free(template); + exit(1); + } + + return template; +} + +char* u_cat(const char* a, const char* b) { + size_t len_a = strlen(a); + size_t len_b = strlen(b); + + char* result = malloc(len_a + len_b + 1); + if (!result) { + perror("malloc failed"); + exit(1); + } + + memcpy(result, a, len_a); + memcpy(result + len_a, b, len_b + 1); // include null terminator + + return result; +} + +int u_wordcount(const char* str) { + if (!str) return 0; + + int count = 0; + int in_word = 0; + + for (size_t i = 0; str[i]; i++) { + // Japan smh ( = 0xE3 0x80 0x80) + int is_space = (str[i] == ' ') || + ((unsigned char)str[i] == 0xE3 && + (unsigned char)str[i+1] == 0x80 && + (unsigned char)str[i+2] == 0x80); + + if (is_space) { + in_word = 0; + } else if (!in_word) { + in_word = 1; + count++; + } + } + + return count; +} -- cgit v1.2.3