]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
boot: Add strchr8/16
authorJan Janssen <medhefgo@web.de>
Tue, 24 May 2022 08:21:31 +0000 (10:21 +0200)
committerJan Janssen <medhefgo@web.de>
Tue, 31 May 2022 13:13:58 +0000 (15:13 +0200)
src/boot/efi/efi-string.c
src/boot/efi/efi-string.h
src/boot/efi/test-efi-string.c

index 4df705b30d3e7c25b7a9a42996f5f88644906f1f..540ee0b223e586c8db7fec4864a3a2afe860c400 100644 (file)
@@ -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);
index d3c1786b47b0b6ae7f0ed2acb88b2ff0c4841750..c4973a0d74dd8f1eac1e998732cc434a4a58e4d5 100644 (file)
@@ -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);
index 384d5868bad37913c8d60c7cce9dc4fd6d6b8dfb..2ff8bef3f629c889112fa87404756c3188592aa9 100644 (file)
@@ -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);