From: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Date: Thu, 29 Dec 2022 13:44:03 +0000 (+0100)
Subject: lib: add function u16_strcasecmp()
X-Git-Tag: v2025.01-rc5-pxa1908~1167^2~3
X-Git-Url: http://git.dujemihanovic.xyz/%22http:/www.sics.se/static/login.html?a=commitdiff_plain;h=7a9b366cd9b7c1c880fda82509054a06fbac208c;p=u-boot.git

lib: add function u16_strcasecmp()

Provide a function for comparing UTF-16 strings in a case insensitive
manner.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
---

diff --git a/include/charset.h b/include/charset.h
index e900fd789a..6e79d7152e 100644
--- a/include/charset.h
+++ b/include/charset.h
@@ -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
  *
diff --git a/lib/charset.c b/lib/charset.c
index bece4985bf..b1842755eb 100644
--- a/lib/charset.c
+++ b/lib/charset.c
@@ -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
  *