From 10c6abb36a8a4349b3de7717724816ea59d2f4c3 Mon Sep 17 00:00:00 2001 From: Consolatis <35009135+Consolatis@users.noreply.github.com> Date: Mon, 6 Jan 2025 07:19:15 +0100 Subject: [PATCH] string-helpers: add str_endswith_ignore_case() --- include/common/string-helpers.h | 11 +++++++++++ src/common/string-helpers.c | 29 ++++++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/include/common/string-helpers.h b/include/common/string-helpers.h index b37da83b..dca70789 100644 --- a/include/common/string-helpers.h +++ b/include/common/string-helpers.h @@ -73,6 +73,17 @@ char *str_join(const char *const parts[], */ bool str_endswith(const char *const string, const char *const suffix); +/** + * str_endswith_ignore_case - indicate whether a string ends with a given suffix + * @string: string to test + * @suffix: suffix to expect in string + * + * If suffix is "" or NULL, this method always returns true; otherwise, this + * method returns true if and only if the full suffix exists at the end of the + * string. + */ +bool str_endswith_ignore_case(const char *const string, const char *const suffix); + /** * str_starts_with - indicate whether a string starts with a given character * @string: string to test diff --git a/src/common/string-helpers.c b/src/common/string-helpers.c index a1d873dd..e517751e 100644 --- a/src/common/string-helpers.c +++ b/src/common/string-helpers.c @@ -2,11 +2,18 @@ #include #include #include +#include #include #include +#include #include "common/mem.h" #include "common/string-helpers.h" +enum str_flags { + STR_FLAG_NONE = 0, + STR_FLAG_IGNORE_CASE, +}; + bool string_null_or_empty(const char *s) { @@ -154,8 +161,8 @@ str_join(const char *const parts[], return buf; } -bool -str_endswith(const char *const string, const char *const suffix) +static bool +_str_endswith(const char *const string, const char *const suffix, uint32_t flags) { size_t len_str = string ? strlen(string) : 0; size_t len_sfx = suffix ? strlen(suffix) : 0; @@ -168,7 +175,23 @@ str_endswith(const char *const string, const char *const suffix) return true; } - return strcmp(string + len_str - len_sfx, suffix) == 0; + if (flags & STR_FLAG_IGNORE_CASE) { + return strcasecmp(string + len_str - len_sfx, suffix) == 0; + } else { + return strcmp(string + len_str - len_sfx, suffix) == 0; + } +} + +bool +str_endswith(const char *const string, const char *const suffix) +{ + return _str_endswith(string, suffix, STR_FLAG_NONE); +} + +bool +str_endswith_ignore_case(const char *const string, const char *const suffix) +{ + return _str_endswith(string, suffix, STR_FLAG_IGNORE_CASE); } bool -- 2.52.0