From mboxrd@z Thu Jan 1 00:00:00 1970 From: AKASHI Takahiro Date: Wed, 24 Apr 2019 15:30:36 +0900 Subject: [U-Boot] [PATCH v2 02/11] lib: charset: add u16_strncmp() In-Reply-To: <20190424063045.14443-1-takahiro.akashi@linaro.org> References: <20190424063045.14443-1-takahiro.akashi@linaro.org> Message-ID: <20190424063045.14443-3-takahiro.akashi@linaro.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de u16_strncmp() works like u16_strcmp() but only at most n characters (in u16) are compared. This function will be used in a later patch. Signed-off-by: AKASHI Takahiro --- include/charset.h | 5 +++++ lib/charset.c | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/charset.h b/include/charset.h index 747a9b376c03..49842a88bc8b 100644 --- a/include/charset.h +++ b/include/charset.h @@ -171,6 +171,11 @@ s32 utf_to_upper(const s32 code); */ int u16_strcmp(const u16 *s1, const u16 *s2); +/* + * u16_strncmp() - strncmp() for u16 strings + */ +int u16_strncmp(const u16 *s1, const u16 *s2, size_t n); + /** * u16_strlen - count non-zero words * diff --git a/lib/charset.c b/lib/charset.c index 4a25ac0bdb9c..85f08db68fe2 100644 --- a/lib/charset.c +++ b/lib/charset.c @@ -345,6 +345,19 @@ int u16_strcmp(const u16 *s1, const u16 *s2) return (*(uint16_t *)s1 - *(uint16_t *)s2); } +int u16_strncmp(const u16 *s1, const u16 *s2, size_t n) +{ + while ((n-- > 0) && (*s1 == *s2++)) { + if (*s1++ == 0) + return 0; + if (!n) + return 0; + } + --s2; + + return (*(uint16_t *)s1 - *(uint16_t *)s2); +} + size_t u16_strlen(const u16 *in) { size_t i; -- 2.20.1