diff mbox series

[U-Boot,RFC,01/15] lib: charset: add u16_str<n>cmp()

Message ID 20190918012643.25192-2-takahiro.akashi@linaro.org
State Accepted
Commit f8062c963a6285ce04b75570a1beaec27a40aec1
Delegated to: Heinrich Schuchardt
Headers show
Series efi_loader: add secure boot support | expand

Commit Message

AKASHI Takahiro Sept. 18, 2019, 1:26 a.m. UTC
u16 version of strcmp(): u16_strncmp() works like u16_strcmp() but only
at most n characters (in u16) are compared.
This function will be used in my UEFI secure boot patch.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
---
 include/charset.h | 15 +++++++++++++++
 lib/charset.c     | 25 +++++++++++++++++++++++++
 2 files changed, 40 insertions(+)

Comments

Heinrich Schuchardt Sept. 18, 2019, 11:16 a.m. UTC | #1
On 9/18/19 3:26 AM, AKASHI Takahiro wrote:
> u16 version of strcmp(): u16_strncmp() works like u16_strcmp() but only
> at most n characters (in u16) are compared.
> This function will be used in my UEFI secure boot patch.
>
> Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>

Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
diff mbox series

Patch

diff --git a/include/charset.h b/include/charset.h
index 020f8a90df07..fde6bddbc2fb 100644
--- a/include/charset.h
+++ b/include/charset.h
@@ -168,6 +168,21 @@  s32 utf_to_lower(const s32 code);
  */
 s32 utf_to_upper(const s32 code);
 
+/*
+ * u16_strncmp() - compare two u16 string
+ *
+ * @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
+ *		corresponding u16 in s2
+ */
+int u16_strncmp(const u16 *s1, const u16 *s2, size_t n);
+#define u16_strcmp(s1, s2)	u16_strncmp((s1), (s2), SIZE_MAX)
+
 /**
  * u16_strlen - count non-zero words
  *
diff --git a/lib/charset.c b/lib/charset.c
index 72d745da4f4e..1c6a7f693de4 100644
--- a/lib/charset.c
+++ b/lib/charset.c
@@ -335,6 +335,31 @@  s32 utf_to_upper(const s32 code)
 	return ret;
 }
 
+/*
+ * u16_strncmp() - compare two u16 string
+ *
+ * @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
+ *		corresponding u16 in s2
+ */
+int u16_strncmp(const u16 *s1, const u16 *s2, size_t n)
+{
+	int ret = 0;
+
+	for (; n; --n, ++s1, ++s2) {
+		ret = *s1 - *s2;
+		if (ret || !*s1)
+			break;
+	}
+
+	return ret;
+}
+
 size_t u16_strlen(const void *in)
 {
 	const char *pos = in;