mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 00:14:32 +09:00
efi: add strcspn16()/strspn16() to efi libs too
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user