From 5e0f635a565915ea2571ca82ad4160f6fb1df29d Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Tue, 4 Feb 2025 17:13:15 +0000 Subject: [PATCH] strings: Add function to truncate strings Signed-off-by: Michael Tremer --- src/pakfire/string.c | 12 ++++++++++++ src/pakfire/string.h | 2 ++ tests/libpakfire/string.c | 26 ++++++++++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/src/pakfire/string.c b/src/pakfire/string.c index 6ebec1c7..edd4211d 100644 --- a/src/pakfire/string.c +++ b/src/pakfire/string.c @@ -175,6 +175,18 @@ int pakfire_string_matches(const char* s, const char* pattern) { return !!strstr(s, pattern); } +void pakfire_string_truncate(char* s, const size_t l) { + // Determine the length of the string + size_t length = strlen(s); + + // Return if the string isn't long enough + if (length < l) + return; + + // Truncate + s[l] = '\0'; +} + int pakfire_string_partition(const char* s, const char* delim, char** s1, char** s2) { char* p = strstr(s, delim); diff --git a/src/pakfire/string.h b/src/pakfire/string.h index 0e7f1091..b7fd8d65 100644 --- a/src/pakfire/string.h +++ b/src/pakfire/string.h @@ -56,6 +56,8 @@ int pakfire_string_startswith(const char* s, const char* prefix); int pakfire_string_endswith(const char* s, const char* suffix); int pakfire_string_matches(const char* s, const char* pattern); +void pakfire_string_truncate(char* s, const size_t l); + // Strip void pakfire_string_lstrip(char* s); void pakfire_string_rstrip(char* s); diff --git a/tests/libpakfire/string.c b/tests/libpakfire/string.c index a4a56ff4..56e01a96 100644 --- a/tests/libpakfire/string.c +++ b/tests/libpakfire/string.c @@ -413,6 +413,31 @@ FAIL: return r; } +static int test_truncate(const struct test* t) { + char s[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + int r = EXIT_FAILURE; + + // Truncate the string bit by bit + + pakfire_string_truncate(s, 24); + ASSERT_STRING_EQUALS(s, "ABCDEFGHIJKLMNOPQRSTUVWX"); + + pakfire_string_truncate(s, 3); + ASSERT_STRING_EQUALS(s, "ABC"); + + pakfire_string_truncate(s, 4); + ASSERT_STRING_EQUALS(s, "ABC"); + + pakfire_string_truncate(s, 0); + ASSERT_STRING_EQUALS(s, ""); + + // Everything passed + r = EXIT_SUCCESS; + +FAIL: + return r; +} + int main(int argc, const char* argv[]) { testsuite_add_test(test_string_set, 0); testsuite_add_test(test_string_setn, 0); @@ -428,6 +453,7 @@ int main(int argc, const char* argv[]) { testsuite_add_test(test_intervals, 0); testsuite_add_test(test_string_contains_whitespace, 0); testsuite_add_test(test_string_search, 0); + testsuite_add_test(test_truncate, 0); return testsuite_run(argc, argv); } -- 2.39.5