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>
This commit is contained in:
Heinrich Schuchardt 2022-12-29 14:44:03 +01:00
parent d7ddeb66a6
commit 7a9b366cd9
2 changed files with 39 additions and 0 deletions

View 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
*

View 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
*