From: Jan Janssen Date: Tue, 24 May 2022 08:21:31 +0000 (+0200) Subject: boot: Add strchr8/16 X-Git-Tag: v252-rc1~892^2~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5d7e0e834135648f02776a0df663abf92fffceff;p=thirdparty%2Fsystemd.git boot: Add strchr8/16 --- diff --git a/src/boot/efi/efi-string.c b/src/boot/efi/efi-string.c index 4df705b30d3..540ee0b223e 100644 --- a/src/boot/efi/efi-string.c +++ b/src/boot/efi/efi-string.c @@ -121,3 +121,20 @@ int strcasecmp16(const char16_t *s1, const char16_t *s2) { DEFINE_STRCPY(char, strcpy8); DEFINE_STRCPY(char16_t, strcpy16); + +#define DEFINE_STRCHR(type, name) \ + type *name(const type *s, type c) { \ + if (!s) \ + return NULL; \ + \ + while (*s) { \ + if (*s == c) \ + return (type *) s; \ + s++; \ + } \ + \ + return NULL; \ + } + +DEFINE_STRCHR(char, strchr8); +DEFINE_STRCHR(char16_t, strchr16); diff --git a/src/boot/efi/efi-string.h b/src/boot/efi/efi-string.h index d3c1786b47b..c4973a0d74d 100644 --- a/src/boot/efi/efi-string.h +++ b/src/boot/efi/efi-string.h @@ -60,3 +60,6 @@ static inline bool strcaseeq16(const char16_t *s1, const char16_t *s2) { char *strcpy8(char * restrict dest, const char * restrict src); char16_t *strcpy16(char16_t * restrict dest, const char16_t * restrict src); + +char *strchr8(const char *s, char c); +char16_t *strchr16(const char16_t *s, char16_t c); diff --git a/src/boot/efi/test-efi-string.c b/src/boot/efi/test-efi-string.c index 384d5868bad..2ff8bef3f62 100644 --- a/src/boot/efi/test-efi-string.c +++ b/src/boot/efi/test-efi-string.c @@ -200,4 +200,26 @@ TEST(strcpy16) { assert_se(streq16(buf, u"")); } +TEST(strchr8) { + assert_se(!strchr8(NULL, 'a')); + assert_se(!strchr8("", 'a')); + assert_se(!strchr8("123", 'a')); + + const char str[] = "abcaBc"; + assert_se(strchr8(str, 'a') == &str[0]); + assert_se(strchr8(str, 'c') == &str[2]); + assert_se(strchr8(str, 'B') == &str[4]); +} + +TEST(strchr16) { + assert_se(!strchr16(NULL, 'a')); + assert_se(!strchr16(u"", 'a')); + assert_se(!strchr16(u"123", 'a')); + + const char16_t str[] = u"abcaBc"; + assert_se(strchr16(str, 'a') == &str[0]); + assert_se(strchr16(str, 'c') == &str[2]); + assert_se(strchr16(str, 'B') == &str[4]); +} + DEFINE_TEST_MAIN(LOG_INFO);