From 13cf7946bf6b9b6df934d785dc2fe8e39f04180b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20R=C3=B6ger?= Date: Sun, 12 Apr 2026 17:17:57 +0200 Subject: [PATCH] fix(string_view): cleanup memmcpy line artifacts --- CMakeLists.txt | 3 ++- include/c-libs/string-view.h | 6 +++--- test/string-view.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 test/string-view.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b9f648..b783dc4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,8 @@ if(BUILD_TESTING) find_package(PkgConfig REQUIRED) pkg_check_modules(CRITERION REQUIRED IMPORTED_TARGET GLOBAL criterion) - add_executable(tests ${CMAKE_CURRENT_SOURCE_DIR}/test/darr.c) + add_executable(tests ${CMAKE_CURRENT_SOURCE_DIR}/test/darr.c + ${CMAKE_CURRENT_SOURCE_DIR}/test/string-view.c) target_link_libraries(tests c-libs PkgConfig::CRITERION) add_test(NAME all_tests COMMAND tests) diff --git a/include/c-libs/string-view.h b/include/c-libs/string-view.h index 9a4e8be..59c53b5 100644 --- a/include/c-libs/string-view.h +++ b/include/c-libs/string-view.h @@ -175,10 +175,10 @@ char *sv_clone(StringView sv); /// ///@brief Concatenate a list of string views with a separator. The result must -///be freed +/// be freed /// ///@return char a null-terminated string containing all svs separated with sep. -///Must be freed +/// Must be freed /// char *sv_concat_with_sep(const StringView *svs, size_t n, StringView sep); @@ -340,7 +340,7 @@ char *sv_concat_with_sep(const StringView *svs, size_t n, StringView sep) { } size_t l = sv_len(svs[i]); - memcpy(wri + memcpy(write_head, svs[i].data, l); write_head += l; } diff --git a/test/string-view.c b/test/string-view.c new file mode 100644 index 0000000..bb14e5c --- /dev/null +++ b/test/string-view.c @@ -0,0 +1,30 @@ +#include "c-libs/string-view.h" +#include + +Test(sv, construction) { + const char *data = "abcdefg"; + size_t len = strlen(data); + + StringView sv1 = sv_new(data); + StringView sv2 = sv_new_sized(data, 2); + + cr_assert(sv1.data == data); + cr_assert(sv1.end == data + len); + cr_assert(sv2.data == data); + cr_assert(sv2.end == data + 2); +} + +Test(sv, inspection) { + const char *data = "abcdefg"; + size_t len = strlen(data); + + StringView sv1 = sv_new(data); + char *clone = sv_clone(sv1); + + cr_assert(sv_len(sv1) == len); + cr_assert_str_eq(data, clone); + cr_assert(sv_eq(sv1, sv1)); + cr_assert_not(sv_eq(sv1, sv_drop(sv1, 1))); + + free(clone); +}