Skip to content

Commit 197b3f3

Browse files
author
Bartosz Golaszewski
committed
string: provide strends()
Implement a function for checking if a string ends with a different string and add its kunit test cases. Acked-by: Linus Walleij <linus.walleij@linaro.org> Link: https://lore.kernel.org/r/20251112-gpio-shared-v4-1-b51f97b1abd8@linaro.org Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
1 parent 3a86608 commit 197b3f3

2 files changed

Lines changed: 31 additions & 0 deletions

File tree

include/linux/string.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,4 +562,22 @@ static inline bool strstarts(const char *str, const char *prefix)
562562
return strncmp(str, prefix, strlen(prefix)) == 0;
563563
}
564564

565+
/**
566+
* strends - Check if a string ends with another string.
567+
* @str - NULL-terminated string to check against @suffix
568+
* @suffix - NULL-terminated string defining the suffix to look for in @str
569+
*
570+
* Returns:
571+
* True if @str ends with @suffix. False in all other cases.
572+
*/
573+
static inline bool strends(const char *str, const char *suffix)
574+
{
575+
unsigned int str_len = strlen(str), suffix_len = strlen(suffix);
576+
577+
if (str_len < suffix_len)
578+
return false;
579+
580+
return !(strcmp(str + str_len - suffix_len, suffix));
581+
}
582+
565583
#endif /* _LINUX_STRING_H_ */

lib/tests/string_kunit.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,18 @@ static void string_test_memtostr(struct kunit *test)
602602
KUNIT_EXPECT_EQ(test, dest[7], '\0');
603603
}
604604

605+
static void string_test_strends(struct kunit *test)
606+
{
607+
KUNIT_EXPECT_TRUE(test, strends("foo-bar", "bar"));
608+
KUNIT_EXPECT_TRUE(test, strends("foo-bar", "-bar"));
609+
KUNIT_EXPECT_TRUE(test, strends("foobar", "foobar"));
610+
KUNIT_EXPECT_TRUE(test, strends("foobar", ""));
611+
KUNIT_EXPECT_FALSE(test, strends("bar", "foobar"));
612+
KUNIT_EXPECT_FALSE(test, strends("", "foo"));
613+
KUNIT_EXPECT_FALSE(test, strends("foobar", "ba"));
614+
KUNIT_EXPECT_TRUE(test, strends("", ""));
615+
}
616+
605617
static struct kunit_case string_test_cases[] = {
606618
KUNIT_CASE(string_test_memset16),
607619
KUNIT_CASE(string_test_memset32),
@@ -623,6 +635,7 @@ static struct kunit_case string_test_cases[] = {
623635
KUNIT_CASE(string_test_strlcat),
624636
KUNIT_CASE(string_test_strtomem),
625637
KUNIT_CASE(string_test_memtostr),
638+
KUNIT_CASE(string_test_strends),
626639
{}
627640
};
628641

0 commit comments

Comments
 (0)