From 1e25fa45f802ef9f404282fd3eeff1b118155ea7 Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Sun, 28 Dec 2025 18:17:59 +0900 Subject: [PATCH] things --- core/string.c | 46 +++++++++++++++++++++++++++++++++++++++ include/MDE/Core/String.h | 2 ++ 2 files changed, 48 insertions(+) diff --git a/core/string.c b/core/string.c index 83ba086..a60a3b9 100644 --- a/core/string.c +++ b/core/string.c @@ -1,5 +1,7 @@ #include +#include + char* MDEStringDuplicate(const char* src) { char* s = malloc(strlen(src) + 1); @@ -34,3 +36,47 @@ char* MDEStringConcatenate4(const char* str1, const char* str2, const char* str3 return r; } + +char** MDEStringToExec(const char* exec, const char* file) { + char** a = NULL; + int i; + char* buf = malloc(1); + + buf[0] = 0; + + for(i = 0;; i++) { + if(exec[i] == ' ' || exec[i] == 0) { + if(strlen(buf) > 0) arrput(a, buf); + + buf = malloc(1); + buf[0] = 0; + + if(exec[i] == 0) break; + } else if(exec[i] == '%') { + char c = exec[++i]; + + if(c == 'f' && file != NULL) { + char* old = buf; + + buf = malloc(strlen(old) + strlen(file) + 1); + strcpy(buf, old); + strcpy(buf + strlen(old), file); + + free(old); + } + } else { + char* old = buf; + + buf = malloc(strlen(old) + 2); + strcpy(buf, old); + buf[strlen(old)] = exec[i]; + buf[strlen(old) + 1] = 0; + + free(old); + } + } + + arrput(a, NULL); + + return a; +} diff --git a/include/MDE/Core/String.h b/include/MDE/Core/String.h index f09bff9..7dbada6 100644 --- a/include/MDE/Core/String.h +++ b/include/MDE/Core/String.h @@ -15,6 +15,8 @@ char* MDEStringConcatenate3(const char* str1, const char* str2, const char* str3 char* MDEStringConcatenate4(const char* str1, const char* str2, const char* str3, const char* str4); +char** MDEStringToExec(const char* exec, const char* file); + #ifdef __cplusplus } #endif