]> git.mdlowis.com Git - proto/labwc.git/commitdiff
string-helpers: add str_endswith_ignore_case()
authorConsolatis <35009135+Consolatis@users.noreply.github.com>
Mon, 6 Jan 2025 06:19:15 +0000 (07:19 +0100)
committerHiroaki Yamamoto <hrak1529@gmail.com>
Wed, 8 Jan 2025 15:57:06 +0000 (00:57 +0900)
include/common/string-helpers.h
src/common/string-helpers.c

index b37da83bd3708960d99d9fdbe7a26ab78bfe7a85..dca707898875bfc0796c582acdee97e7e985dca9 100644 (file)
@@ -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
index a1d873dd15d2911da9fda8131bcb19d04bfba644..e517751ee47e7b5c7f1e6500feaaa60c893dfc93 100644 (file)
@@ -2,11 +2,18 @@
 #include <assert.h>
 #include <ctype.h>
 #include <stdarg.h>
+#include <stdint.h>
 #include <stdio.h>
 #include <string.h>
+#include <strings.h>
 #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