From dcbda91730a4c839844485d327ce9c7014514094 Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Fri, 13 Sep 2024 02:57:06 +0100 Subject: [PATCH] str8_substr returns copy of the string --- src/main.c | 6 +++--- src/str/str.c | 6 ++++-- src/str/str.h | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main.c b/src/main.c index d5d884b..fd79d1a 100644 --- a/src/main.c +++ b/src/main.c @@ -61,15 +61,15 @@ internal TinyArgs parse_args(Arena *arena, int argc, char *argv[]) { exit(TINY_EXIT_OBJ_NOT_EXIST); } - const Str8 basename = str8_substr(&args.obj, 0, args.obj.length - 4); + u64 substr_end = args.obj.length - 4; - args.diffuse = str8_copy(arena, &basename); + args.diffuse = str8_substr(arena, &args.obj, 0, substr_end); str8_concat(arena, &args.diffuse, "_diffuse.pnm"); if (!file_exists(&args.diffuse)) { args.diffuse = (Str8){0}; } - args.nm_tangent = str8_copy(arena, &basename); + args.nm_tangent = str8_substr(arena, &args.obj, 0, substr_end); str8_concat(arena, &args.nm_tangent, "_nm_tangent.pnm"); if (!file_exists(&args.nm_tangent)) { args.nm_tangent = (Str8){0}; diff --git a/src/str/str.c b/src/str/str.c index d82e77d..1017bd1 100644 --- a/src/str/str.c +++ b/src/str/str.c @@ -85,14 +85,16 @@ i32 str8_concat(Arena *arena, Str8 *dst, char *src) { return STR_OP_SUCEEDED; } -const Str8 str8_substr(const Str8 *str, u64 start, u64 count) { +Str8 str8_substr(Arena *arena, const Str8 *str, u64 start, u64 count) { if (start > str->length || start + count > str->length) { return (Str8){0}; } - return (Str8){ + Str8 tmp = { .str = str->str + start, .length = count, .capacity = count, }; + + return str8_copy(arena, &tmp); } diff --git a/src/str/str.h b/src/str/str.h index 771bdc2..b957689 100644 --- a/src/str/str.h +++ b/src/str/str.h @@ -21,6 +21,6 @@ struct str8 { Str8 str8(Arena *arena, char *str); Str8 str8_copy(Arena *arena, const Str8 *str); i32 str8_concat(Arena *arena, Str8 *dst, char *src); -const Str8 str8_substr(const Str8 *str, u64 start, u64 count); +Str8 str8_substr(Arena *arena, const Str8 *str, u64 start, u64 count); #endif // !STR_H