summaryrefslogtreecommitdiff
path: root/src/utils
diff options
context:
space:
mode:
authorA404M <ahmadmahmoudiprogrammer@gmail.com>2025-04-24 02:30:09 +0330
committerA404M <ahmadmahmoudiprogrammer@gmail.com>2025-04-24 02:30:09 +0330
commit07e5fc400493093cd03493ef469b9b97fa1fe87a (patch)
treecd9aff588630fab8bfb98e30f0f1c72080a2946f /src/utils
parentf91fc3bac670a8c775c7ea7b8ba8789dba9559ad (diff)
add @import
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/file.c43
-rw-r--r--src/utils/file.h4
-rw-r--r--src/utils/string.c7
-rw-r--r--src/utils/string.h2
4 files changed, 55 insertions, 1 deletions
diff --git a/src/utils/file.c b/src/utils/file.c
index 714dc2c..340875c 100644
--- a/src/utils/file.c
+++ b/src/utils/file.c
@@ -80,3 +80,46 @@ size_t getFileIndex(const char *filePath) {
return fileCodes_length;
}
+
+char *joinToPathOf(const char *original, const char *file) {
+ size_t result_size = 0;
+ for (size_t i = 0; original[i] != '\0'; ++i) {
+ if (original[i] == '/') {
+ result_size = i;
+ }
+ }
+ char *result =
+ a404m_malloc((result_size + 1 + strlen(file) + 1) * sizeof(*result));
+
+ strncpy(result, original, result_size);
+ result[result_size++] = '/';
+
+ bool startOfDirName = true;
+ for (size_t i = 0; file[i] != '\0'; ++i) {
+ if (startOfDirName && file[i + 1] == '.') {
+ if (file[i + 2] == '/') {
+ i += 2;
+ continue;
+ } else if (file[i + 2] == '.' && file[i + 3] == '/') {
+ bool found = false;
+ for (size_t j = i - 2; j != -1ULL; --j) {
+ if (result[j] == '/') {
+ result_size = j;
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ result_size = 0;
+ }
+ continue;
+ }
+ }
+ result[result_size++] = file[i];
+ }
+
+ result[result_size++] = '\0';
+ result = a404m_realloc(result, result_size);
+
+ return result;
+}
diff --git a/src/utils/file.h b/src/utils/file.h
index f0b0d8c..7b0dc37 100644
--- a/src/utils/file.h
+++ b/src/utils/file.h
@@ -10,7 +10,9 @@ extern size_t fileCodes_length;
void fileInit();
void fileDelete();
-void filePush(const char *filePath,char *code);
+void filePush(const char *filePath, char *code);
char *readWholeFile(const char *filePath);
size_t getFileIndex(const char *filePath);
+
+char *joinToPathOf(const char *original, const char *file);
diff --git a/src/utils/string.c b/src/utils/string.c
index 16e9f9b..55d2c3e 100644
--- a/src/utils/string.c
+++ b/src/utils/string.c
@@ -85,3 +85,10 @@ char *u64ToString(u64 value) {
return a404m_realloc(str, (i + 1) * sizeof(*str));
}
+
+char *strClone(const char *str) {
+ const size_t str_length = strlen(str) + 1;
+ char *result = a404m_malloc(str_length * sizeof(*result));
+ strncpy(result, str, str_length);
+ return result;
+}
diff --git a/src/utils/string.h b/src/utils/string.h
index 54130e5..a5a0319 100644
--- a/src/utils/string.h
+++ b/src/utils/string.h
@@ -10,3 +10,5 @@ size_t searchInStringArray(const char *array[], size_t array_size,
u64 decimalToU64(char *str_begin, char *str_end, bool *success);
f128 numberToFloat(char *str_begin, char *str_end, bool *success);
char* u64ToString(u64 value);
+
+char *strClone(const char *str);