]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
lib: add function u16_strcasecmp()
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Thu, 29 Dec 2022 13:44:03 +0000 (14:44 +0100)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Wed, 4 Jan 2023 12:17:42 +0000 (13:17 +0100)
Provide a function for comparing UTF-16 strings in a case insensitive
manner.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
include/charset.h
lib/charset.c

index e900fd789a2b472bc0360601c160b22c88a98fd6..6e79d7152e6a4f2c0a5e9bd06a42ec04ce56ca50 100644 (file)
@@ -173,6 +173,19 @@ s32 utf_to_lower(const s32 code);
  */
 s32 utf_to_upper(const s32 code);
 
+/**
+ * u16_strcasecmp() - compare two u16 strings case insensitively
+ *
+ * @s1:                first string to compare
+ * @s2:                second string to compare
+ * @n:         maximum number of u16 to compare
+ * Return:     0  if the first n u16 are the same in s1 and s2
+ *             < 0 if the first different u16 in s1 is less than the
+ *             corresponding u16 in s2
+ *             > 0 if the first different u16 in s1 is greater than the
+ */
+int u16_strcasecmp(const u16 *s1, const u16 *s2);
+
 /**
  * u16_strncmp() - compare two u16 string
  *
index bece4985bfc9e1ff8ac086dab1a3bf75cf10fda6..b1842755eb1b64ef6d42123145385fbc6cc5c655 100644 (file)
@@ -350,6 +350,32 @@ s32 utf_to_upper(const s32 code)
        return ret;
 }
 
+/*
+ * u16_strcasecmp() - compare two u16 strings case insensitively
+ *
+ * @s1:                first string to compare
+ * @s2:                second string to compare
+ * @n:         maximum number of u16 to compare
+ * Return:     0  if the first n u16 are the same in s1 and s2
+ *             < 0 if the first different u16 in s1 is less than the
+ *             corresponding u16 in s2
+ *             > 0 if the first different u16 in s1 is greater than the
+ */
+int u16_strcasecmp(const u16 *s1, const u16 *s2)
+{
+       int ret = 0;
+       s32 c1, c2;
+
+       for (;;) {
+               c1 = utf_to_upper(utf16_get(&s1));
+               c2 = utf_to_upper(utf16_get(&s2));
+               ret = c1 - c2;
+               if (ret || !c1 || c1 == -1 || c2 == -1)
+                       break;
+       }
+       return ret;
+}
+
 /*
  * u16_strncmp() - compare two u16 string
  *