Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+31
+18
include/linux/string.h
··· 562 562 return strncmp(str, prefix, strlen(prefix)) == 0; 563 563 } 564 564 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 + 565 583 #endif /* _LINUX_STRING_H_ */
+13
lib/tests/string_kunit.c
··· 602 602 KUNIT_EXPECT_EQ(test, dest[7], '\0'); 603 603 } 604 604 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 + 605 617 static struct kunit_case string_test_cases[] = { 606 618 KUNIT_CASE(string_test_memset16), 607 619 KUNIT_CASE(string_test_memset32), ··· 635 623 KUNIT_CASE(string_test_strlcat), 636 624 KUNIT_CASE(string_test_strtomem), 637 625 KUNIT_CASE(string_test_memtostr), 626 + KUNIT_CASE(string_test_strends), 638 627 {} 639 628 }; 640 629