efi: add strcspn16()/strspn16() to efi libs too

This commit is contained in:
Lennart Poettering
2025-02-11 23:47:00 +01:00
parent d9d3e9d6c1
commit f684168050
4 changed files with 52 additions and 0 deletions

View File

@@ -1109,3 +1109,27 @@ void *memset(void *p, int c, size_t n) {
return p;
}
size_t strspn16(const char16_t *p, const char16_t *good) {
assert(p);
assert(good);
const char16_t *i = p;
for (; *i != 0; i++)
if (!strchr16(good, *i))
break;
return i - p;
}
size_t strcspn16(const char16_t *p, const char16_t *bad) {
assert(p);
assert(bad);
const char16_t *i = p;
for (; *i != 0; i++)
if (strchr16(bad, *i))
break;
return i - p;
}

View File

@@ -108,6 +108,9 @@ static inline char *xstr16_to_ascii(const char16_t *str16) {
char* startswith8(const char *s, const char *prefix);
size_t strspn16(const char16_t *p, const char16_t *good);
size_t strcspn16(const char16_t *p, const char16_t *bad);
bool efi_fnmatch(const char16_t *pattern, const char16_t *haystack);
bool parse_number8(const char *s, uint64_t *ret_u, const char **ret_tail);

View File

@@ -831,4 +831,27 @@ TEST(efi_memset) {
assert_se(memcmp(buf, "aaaaaaaaaa", 10) == 0);
}
TEST(efi_strspn) {
ASSERT_EQ(strspn16(u"foobar", u"fo"), 3U);
ASSERT_EQ(strspn16(u"foobar", u"ob"), 0U);
ASSERT_EQ(strspn16(u"foobar", u"fxayzy"), 1U);
ASSERT_EQ(strspn16(u"", u"abcdefef"), 0U);
ASSERT_EQ(strspn16(u"", u""), 0U);
ASSERT_EQ(strspn16(u"foobar", u""), 0U);
ASSERT_EQ(strspn16(u"foffffffffffoobar", u"fofo"), 14U);
}
TEST(efi_strcspn) {
ASSERT_EQ(strcspn16(u"foobar", u"fo"), 0U);
ASSERT_EQ(strcspn16(u"foobar", u"bar"), 3U);
ASSERT_EQ(strcspn16(u"foobar", u"xhyfzy"), 0U);
ASSERT_EQ(strcspn16(u"foobar", u"xhyozy"), 1U);
ASSERT_EQ(strcspn16(u"foobar", u"xhyzy"), 6U);
ASSERT_EQ(strcspn16(u"", u"abcdefef"), 0U);
ASSERT_EQ(strcspn16(u"", u""), 0U);
ASSERT_EQ(strcspn16(u"foobar", u""), 6U);
ASSERT_EQ(strcspn16(u"foffffffffffoobar", u"fofo"), 0U);
ASSERT_EQ(strcspn16(u"foffffffffffoobar", u"a"), 15U);
}
DEFINE_TEST_MAIN(LOG_INFO);

View File

@@ -16,6 +16,8 @@
# define strncmp strncmp16
# define strcasecmp strcasecmp16
# define strncasecmp strncasecmp16
# define strspn strspn16
# define strcspn strcspn16
# define STR_C(str) (L ## str)
typedef char16_t sd_char;
#else