
On Wed, Apr 24, 2019 at 06:24:44PM +0200, Heinrich Schuchardt wrote:
On 4/24/19 8:30 AM, AKASHI Takahiro wrote:
u16 version of strcmp()
AUTHER: Patrick Wildt patrick@blueri.se
%s/AUTHER/Author/
Okay
Signed-off-by: AKASHI Takahiro takahiro.akashi@linaro.org
include/charset.h | 5 +++++ lib/charset.c | 10 ++++++++++ 2 files changed, 15 insertions(+)
diff --git a/include/charset.h b/include/charset.h index 65087f76d1fc..747a9b376c03 100644 --- a/include/charset.h +++ b/include/charset.h @@ -166,6 +166,11 @@ s32 utf_to_lower(const s32 code); */ s32 utf_to_upper(const s32 code);
+/*
- u16_strcmp() - strcmp() for u16 strings
- */
+int u16_strcmp(const u16 *s1, const u16 *s2);
/**
- u16_strlen - count non-zero words
diff --git a/lib/charset.c b/lib/charset.c index 5e349ed5ee45..4a25ac0bdb9c 100644 --- a/lib/charset.c +++ b/lib/charset.c @@ -335,6 +335,16 @@ s32 utf_to_upper(const s32 code) return ret; }
+int u16_strcmp(const u16 *s1, const u16 *s2) +{
- while (*s1 == *s2++)
if (*s1++ == 0)
return (0);
- --s2;
for (;*s1 == *s2; ++s1, ++s2) if (!s1) return 0;
does the same job without superfluous increment/decrement.
Indeed :)
- return (*(uint16_t *)s1 - *(uint16_t *)s2);
Why would you use both u16 and uint16_t in the same function? You can do without any conversion here.
Will fix.
How about
#define u16_strcmp(s1, s2) u16_strncmp(s1, s2, SIZE_MAX)
like we do for the other string functions?
Sure
Thanks, -Takahiro Akashi
Best regards
Heinrich
+}
size_t u16_strlen(const u16 *in) { size_t i;