Rename cpath

This commit is contained in:
2026-06-26 17:21:41 +01:00
parent 273dbf4535
commit c29466b863
4 changed files with 76 additions and 78 deletions
+18 -20
View File
@@ -8,28 +8,26 @@
#include "../../base/mem/allocator/mem_allocator.h"
#include "../../base/strings/str8/str8.h"
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
u32 wapp_cpath_join_path(WpStr8 *dst, const WpStr8List *parts) {
u32 wpCpathJoinPath(WpStr8 *dst, const WpStr8List *parts) {
if (!dst || !parts) {
return CPATH_JOIN_INVALID_ARGS;
return WP_CPATH_JOIN_RESULT_INVALID_ARGS;
}
if (parts->node_count == 0) {
return CPATH_JOIN_EMPTY_PARTS;
return WP_CPATH_JOIN_RESULT_EMPTY_PARTS;
}
WpStr8 separator = wpStr8Buf(4);
wpStr8PushBack(&separator, WAPP_PATH_SEP);
wpStr8PushBack(&separator, WP_PATH_SEP);
u64 required_capacity = parts->node_count * separator.size + wpStr8ListTotalSize(parts);
if (dst->capacity < required_capacity) {
return CPATH_JOIN_INSUFFICIENT_DST_CAPACITY;
return WP_CPATH_JOIN_RESULT_INSUFFICIENT_DST_CAPACITY;
}
// Handle first node
WpStr8 *first_node = wapp_dbl_list_get(WpStr8, parts, 0);
WpStr8 *first_node = wpDblListGet(WpStr8, parts, 0);
wpStr8CopyStr8Capped(dst, first_node);
// NOTE (Abdelrahman): Uses a while loop instead of a for loop to get rid of
@@ -38,7 +36,7 @@ u32 wapp_cpath_join_path(WpStr8 *dst, const WpStr8List *parts) {
u64 node_index = 1;
b8 running = node_index < parts->node_count;
while (running) {
node = wapp_dbl_list_get(WpStr8, parts, node_index);
node = wpDblListGet(WpStr8, parts, node_index);
if (node->size == 0) {
goto CPATH_JOIN_LOOP_END;
}
@@ -46,7 +44,7 @@ u32 wapp_cpath_join_path(WpStr8 *dst, const WpStr8List *parts) {
if (dst->size > 0) {
char dst_last = wpStr8Get(dst, dst->size - 1);
char node_start = wpStr8Get(node, 0);
b8 add_path_sep = dst_last != WAPP_PATH_SEP && node_start != WAPP_PATH_SEP;
b8 add_path_sep = dst_last != WP_PATH_SEP && node_start != WP_PATH_SEP;
if (add_path_sep) {
wpStr8ConcatCapped(dst, &separator);
@@ -60,18 +58,18 @@ CPATH_JOIN_LOOP_END:
running = node_index < parts->node_count;
}
return CPATH_JOIN_SUCCESS;
return WP_CPATH_JOIN_RESULT_SUCCESS;
}
WpStr8 *dirup(const WpAllocator *allocator, WpStr8RO *path, u64 levels) {
WpStr8 *_dirup(const WpAllocator *allocator, WpStr8RO *path, u64 levels) {
WpStr8 *output = NULL;
if (!allocator || !path) {
goto RETURN_DIRUP;
}
b8 absolute = wpStr8Get(path, 0) == WAPP_PATH_SEP;
b8 absolute = wpStr8Get(path, 0) == WP_PATH_SEP;
WpStr8 separator = wpStr8Buf(4);
wpStr8PushBack(&separator, WAPP_PATH_SEP);
wpStr8PushBack(&separator, WP_PATH_SEP);
if (path->size == 0) {
output = wpStr8AllocBuf(allocator, 16);
@@ -79,7 +77,7 @@ WpStr8 *dirup(const WpAllocator *allocator, WpStr8RO *path, u64 levels) {
goto RETURN_DIRUP;
}
wpStr8PushBack(output, absolute ? WAPP_PATH_SEP : '.');
wpStr8PushBack(output, absolute ? WP_PATH_SEP : '.');
goto RETURN_DIRUP;
}
@@ -88,7 +86,7 @@ WpStr8 *dirup(const WpAllocator *allocator, WpStr8RO *path, u64 levels) {
goto RETURN_DIRUP;
}
WpAllocator tmp_arena = wapp_mem_arena_allocator_init(MiB(8));
WpAllocator tmp_arena = wpMemArenaAllocatorInit(MiB(8));
if (wpMemAllocatorInvalid(&tmp_arena)) {
goto RETURN_DIRUP;
}
@@ -104,10 +102,10 @@ WpStr8 *dirup(const WpAllocator *allocator, WpStr8RO *path, u64 levels) {
goto LIST_CLEANUP_DIRUP;
}
wpStr8PushBack(output, absolute ? WAPP_PATH_SEP : '.');
wpStr8PushBack(output, absolute ? WP_PATH_SEP : '.');
} else {
for (u64 i = 0; i < levels; ++i) {
wapp_dbl_list_pop_back(WpStr8, parts);
wpDblListPopBack(WpStr8, parts);
}
u64 alignment = sizeof(void *) * 2;
@@ -118,7 +116,7 @@ WpStr8 *dirup(const WpAllocator *allocator, WpStr8RO *path, u64 levels) {
output = wpStr8AllocBuf(allocator, alloc_size);
if (output) {
if (absolute) {
wpStr8PushBack(output, WAPP_PATH_SEP);
wpStr8PushBack(output, WP_PATH_SEP);
}
WpStr8 *joined = wpStr8Join(&tmp_arena, parts, &separator);
@@ -129,7 +127,7 @@ WpStr8 *dirup(const WpAllocator *allocator, WpStr8RO *path, u64 levels) {
}
LIST_CLEANUP_DIRUP:
wapp_mem_arena_allocator_destroy(&tmp_arena);
wpMemArenaAllocatorDestroy(&tmp_arena);
RETURN_DIRUP:
return output;
+14 -14
View File
@@ -14,29 +14,29 @@ BEGIN_C_LINKAGE
#ifdef WP_PLATFORM_POSIX
#include <limits.h>
#define WAPP_PATH_SEP '/'
#define WAPP_PATH_MAX PATH_MAX
#define WP_PATH_SEP '/'
#define WP_PATH_MAX PATH_MAX
#elif defined(WP_PLATFORM_WINDOWS)
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#define WAPP_PATH_SEP '\\'
#define WAPP_PATH_MAX MAX_PATH
#define WP_PATH_SEP '\\'
#define WP_PATH_MAX MAX_PATH
#else
#error "Unrecognised platform"
#endif
#define wapp_cpath_dirname(ALLOCATOR, PATH) dirup(ALLOCATOR, PATH, 1)
#define wapp_cpath_dirup(ALLOCATOR, PATH, COUNT) dirup(ALLOCATOR, PATH, COUNT)
#define wpCpathDirname(ALLOCATOR, PATH) _dirup(ALLOCATOR, PATH, 1)
#define wpCpathDirup(ALLOCATOR, PATH, COUNT) _dirup(ALLOCATOR, PATH, COUNT)
enum {
CPATH_JOIN_SUCCESS = 0,
CPATH_JOIN_INVALID_ARGS,
CPATH_JOIN_EMPTY_PARTS,
CPATH_JOIN_INSUFFICIENT_DST_CAPACITY,
};
typedef enum {
WP_CPATH_JOIN_RESULT_SUCCESS = 0,
WP_CPATH_JOIN_RESULT_INVALID_ARGS,
WP_CPATH_JOIN_RESULT_EMPTY_PARTS,
WP_CPATH_JOIN_RESULT_INSUFFICIENT_DST_CAPACITY,
} WpCpathJoinResult;
u32 wapp_cpath_join_path(WpStr8 *dst, const WpStr8List *parts);
WpStr8 *dirup(const WpAllocator *allocator, WpStr8RO *path, u64 levels);
WpCpathJoinResult wpCpathJoinPath(WpStr8 *dst, const WpStr8List *parts);
WpStr8 *_dirup(const WpAllocator *allocator, WpStr8RO *path, u64 levels);
#ifdef WP_PLATFORM_CPP
END_C_LINKAGE
+22 -22
View File
@@ -13,8 +13,8 @@ WpTestFuncResult test_cpath_join_path(void) {
WpStr8 out = wpStr8Buf(MAIN_BUF_SIZE);
WpStr8 tmp = wpStr8Buf(TMP_BUF_SIZE);
wpStr8Format(&expected, "%chome%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&tmp, "%c", WAPP_PATH_SEP);
wpStr8Format(&expected, "%chome%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP, WP_PATH_SEP);
wpStr8Format(&tmp, "%c", WP_PATH_SEP);
WpStr8List parts = wpDblList(WpStr8);
wpDblListPushBack(WpStr8, &parts, &tmp);
@@ -27,7 +27,7 @@ WpTestFuncResult test_cpath_join_path(void) {
wpDblListPopFront(WpStr8, &parts);
wpStr8Format(&expected, "home%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&expected, "home%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP);
wpCpathJoinPath(&out, &parts);
result = result && wpStr8Equal(&out, &expected);
@@ -36,27 +36,27 @@ WpTestFuncResult test_cpath_join_path(void) {
wpDblListPopFront(WpStr8, &parts);
wpDblListPushFront(WpStr8, &parts, &tmp);
wpStr8Format(&expected, "%chome%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&expected, "%chome%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP, WP_PATH_SEP);
wpCpathJoinPath(&out, &parts);
result = result && wpStr8Equal(&out, &expected);
wpStr8Format(&tmp, "home%c", WAPP_PATH_SEP);
wpStr8Format(&tmp, "home%c", WP_PATH_SEP);
wpDblListPopFront(WpStr8, &parts);
wpDblListPushFront(WpStr8, &parts, &wpStr8Lit("home"));
wpStr8Format(&expected, "home%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&expected, "home%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP);
wpCpathJoinPath(&out, &parts);
result = result && wpStr8Equal(&out, &expected);
wpDblListEmpty(WpStr8, &parts);
wpStr8Format(&tmp, "%chome", WAPP_PATH_SEP);
wpStr8Format(&tmp, "%chome", WP_PATH_SEP);
wpDblListPushBack(WpStr8, &parts, &tmp);
wpDblListPushBack(WpStr8, &parts, &wpStr8Lit(""));
wpStr8Format(&expected, "%chome", WAPP_PATH_SEP);
wpStr8Format(&expected, "%chome", WP_PATH_SEP);
wpCpathJoinPath(&out, &parts);
result = result && wpStr8Equal(&out, &expected);
@@ -93,8 +93,8 @@ WpTestFuncResult test_cpath_dirname(void) {
WpStr8 tmp = wpStr8Buf(TMP_BUF_SIZE);
// CASE 1
wpStr8Format(&tmp, "%c", WAPP_PATH_SEP);
wpStr8Format(&expected, "%c", WAPP_PATH_SEP);
wpStr8Format(&tmp, "%c", WP_PATH_SEP);
wpStr8Format(&expected, "%c", WP_PATH_SEP);
output = wpCpathDirname(&arena, &tmp);
result = output != NULL && wpStr8Equal(output, &expected);
@@ -110,15 +110,15 @@ WpTestFuncResult test_cpath_dirname(void) {
result = result && output != NULL && wpStr8Equal(output, &expected);
// CASE 4
wpStr8Format(&tmp, "%chome%ctest", WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&expected, "%chome", WAPP_PATH_SEP);
wpStr8Format(&tmp, "%chome%ctest", WP_PATH_SEP, WP_PATH_SEP);
wpStr8Format(&expected, "%chome", WP_PATH_SEP);
output = wpCpathDirname(&arena, &tmp);
result = result && output != NULL && wpStr8Equal(output, &expected);
// CASE 5
wpStr8Format(&tmp, "%chome%ctest%c", WAPP_PATH_SEP, WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&expected, "%chome", WAPP_PATH_SEP);
wpStr8Format(&tmp, "%chome%ctest%c", WP_PATH_SEP, WP_PATH_SEP, WP_PATH_SEP);
wpStr8Format(&expected, "%chome", WP_PATH_SEP);
output = wpCpathDirname(&arena, &tmp);
result = result && output != NULL && wpStr8Equal(output, &expected);
@@ -141,35 +141,35 @@ WpTestFuncResult test_cpath_dirup(void) {
WpStr8 tmp = wpStr8Buf(TMP_BUF_SIZE);
// CASE 1
wpStr8Format(&tmp, "%c", WAPP_PATH_SEP);
wpStr8Format(&expected, "%c", WAPP_PATH_SEP);
wpStr8Format(&tmp, "%c", WP_PATH_SEP);
wpStr8Format(&expected, "%c", WP_PATH_SEP);
output = wpCpathDirup(&arena, &tmp, 3);
result = output != NULL && wpStr8Equal(output, &expected);
// CASE 2
wpStr8Format(&tmp, "%chome%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&expected, "%c", WAPP_PATH_SEP);
wpStr8Format(&tmp, "%chome%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP, WP_PATH_SEP);
wpStr8Format(&expected, "%c", WP_PATH_SEP);
output = wpCpathDirup(&arena, &tmp, 3);
result = result && output != NULL && wpStr8Equal(output, &expected);
// CASE 3
wpStr8Format(&tmp, "home%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&tmp, "home%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP);
wpStr8CopyCstrCapped(&expected, ".");
output = wpCpathDirup(&arena, &tmp, 3);
result = result && output != NULL && wpStr8Equal(output, &expected);
// CASE 4
wpStr8Format(&tmp, "%chome%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&expected, "%chome", WAPP_PATH_SEP);
wpStr8Format(&tmp, "%chome%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP, WP_PATH_SEP);
wpStr8Format(&expected, "%chome", WP_PATH_SEP);
output = wpCpathDirup(&arena, &tmp, 2);
result = result && output != NULL && wpStr8Equal(output, &expected);
// CASE 5
wpStr8Format(&tmp, "home%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&tmp, "home%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP);
wpStr8CopyCstrCapped(&expected, "home");
output = wpCpathDirup(&arena, &tmp, 2);
+22 -22
View File
@@ -13,8 +13,8 @@ WpTestFuncResult test_cpath_join_path(void) {
WpStr8 out = wpStr8Buf(MAIN_BUF_SIZE);
WpStr8 tmp = wpStr8Buf(TMP_BUF_SIZE);
wpStr8Format(&expected, "%chome%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&tmp, "%c", WAPP_PATH_SEP);
wpStr8Format(&expected, "%chome%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP, WP_PATH_SEP);
wpStr8Format(&tmp, "%c", WP_PATH_SEP);
WpStr8List parts = wpDblList(WpStr8);
@@ -34,7 +34,7 @@ WpTestFuncResult test_cpath_join_path(void) {
wpDblListPopFront(WpStr8, &parts);
wpStr8Format(&expected, "home%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&expected, "home%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP);
wpCpathJoinPath(&out, &parts);
result = result && wpStr8Equal(&out, &expected);
@@ -45,32 +45,32 @@ WpTestFuncResult test_cpath_join_path(void) {
wpDblListPushFront(WpStr8, &parts, &tmp);
wpStr8Format(&expected, "%chome%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&expected, "%chome%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP, WP_PATH_SEP);
wpCpathJoinPath(&out, &parts);
result = result && wpStr8Equal(&out, &expected);
wpStr8Format(&tmp, "home%c", WAPP_PATH_SEP);
wpStr8Format(&tmp, "home%c", WP_PATH_SEP);
wpDblListPopFront(WpStr8, &parts);
WpStr8 home_2 = wpStr8Lit("home");
wpDblListPushFront(WpStr8, &parts, &home_2);
wpStr8Format(&expected, "home%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&expected, "home%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP);
wpCpathJoinPath(&out, &parts);
result = result && wpStr8Equal(&out, &expected);
wpDblListEmpty(WpStr8, &parts);
wpStr8Format(&tmp, "%chome", WAPP_PATH_SEP);
wpStr8Format(&tmp, "%chome", WP_PATH_SEP);
wpDblListPushBack(WpStr8, &parts, &tmp);
WpStr8 empty = wpStr8Lit("");
wpDblListPushBack(WpStr8, &parts, &empty);
wpStr8Format(&expected, "%chome", WAPP_PATH_SEP);
wpStr8Format(&expected, "%chome", WP_PATH_SEP);
wpCpathJoinPath(&out, &parts);
result = result && wpStr8Equal(&out, &expected);
@@ -111,8 +111,8 @@ WpTestFuncResult test_cpath_dirname(void) {
WpStr8 tmp = wpStr8Buf(TMP_BUF_SIZE);
// CASE 1
wpStr8Format(&tmp, "%c", WAPP_PATH_SEP);
wpStr8Format(&expected, "%c", WAPP_PATH_SEP);
wpStr8Format(&tmp, "%c", WP_PATH_SEP);
wpStr8Format(&expected, "%c", WP_PATH_SEP);
output = wpCpathDirname(&arena, &tmp);
result = output != nullptr && wpStr8Equal(output, &expected);
@@ -130,15 +130,15 @@ WpTestFuncResult test_cpath_dirname(void) {
result = result && output != nullptr && wpStr8Equal(output, &expected);
// CASE 4
wpStr8Format(&tmp, "%chome%ctest", WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&expected, "%chome", WAPP_PATH_SEP);
wpStr8Format(&tmp, "%chome%ctest", WP_PATH_SEP, WP_PATH_SEP);
wpStr8Format(&expected, "%chome", WP_PATH_SEP);
output = wpCpathDirname(&arena, &tmp);
result = result && output != nullptr && wpStr8Equal(output, &expected);
// CASE 5
wpStr8Format(&tmp, "%chome%ctest%c", WAPP_PATH_SEP, WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&expected, "%chome", WAPP_PATH_SEP);
wpStr8Format(&tmp, "%chome%ctest%c", WP_PATH_SEP, WP_PATH_SEP, WP_PATH_SEP);
wpStr8Format(&expected, "%chome", WP_PATH_SEP);
output = wpCpathDirname(&arena, &tmp);
result = result && output != nullptr && wpStr8Equal(output, &expected);
@@ -161,35 +161,35 @@ WpTestFuncResult test_cpath_dirup(void) {
WpStr8 tmp = wpStr8Buf(TMP_BUF_SIZE);
// CASE 1
wpStr8Format(&tmp, "%c", WAPP_PATH_SEP);
wpStr8Format(&expected, "%c", WAPP_PATH_SEP);
wpStr8Format(&tmp, "%c", WP_PATH_SEP);
wpStr8Format(&expected, "%c", WP_PATH_SEP);
output = wpCpathDirup(&arena, &tmp, 3);
result = output != nullptr && wpStr8Equal(output, &expected);
// CASE 2
wpStr8Format(&tmp, "%chome%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&expected, "%c", WAPP_PATH_SEP);
wpStr8Format(&tmp, "%chome%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP, WP_PATH_SEP);
wpStr8Format(&expected, "%c", WP_PATH_SEP);
output = wpCpathDirup(&arena, &tmp, 3);
result = result && output != nullptr && wpStr8Equal(output, &expected);
// CASE 3
wpStr8Format(&tmp, "home%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&tmp, "home%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP);
wpStr8CopyCstrCapped(&expected, ".");
output = wpCpathDirup(&arena, &tmp, 3);
result = result && output != nullptr && wpStr8Equal(output, &expected);
// CASE 4
wpStr8Format(&tmp, "%chome%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&expected, "%chome", WAPP_PATH_SEP);
wpStr8Format(&tmp, "%chome%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP, WP_PATH_SEP);
wpStr8Format(&expected, "%chome", WP_PATH_SEP);
output = wpCpathDirup(&arena, &tmp, 2);
result = result && output != nullptr && wpStr8Equal(output, &expected);
// CASE 5
wpStr8Format(&tmp, "home%cabdelrahman%cDocuments", WAPP_PATH_SEP, WAPP_PATH_SEP);
wpStr8Format(&tmp, "home%cabdelrahman%cDocuments", WP_PATH_SEP, WP_PATH_SEP);
wpStr8CopyCstrCapped(&expected, "home");
output = wpCpathDirup(&arena, &tmp, 2);