Commit 197b3f3c authored by Bartosz Golaszewski's avatar Bartosz Golaszewski
Browse files

string: provide strends()



Implement a function for checking if a string ends with a different
string and add its kunit test cases.

Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20251112-gpio-shared-v4-1-b51f97b1abd8@linaro.org


Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
parent 3a866087
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -562,4 +562,22 @@ static inline bool strstarts(const char *str, const char *prefix)
	return strncmp(str, prefix, strlen(prefix)) == 0;
}

/**
 * strends - Check if a string ends with another string.
 * @str - NULL-terminated string to check against @suffix
 * @suffix - NULL-terminated string defining the suffix to look for in @str
 *
 * Returns:
 * True if @str ends with @suffix. False in all other cases.
 */
static inline bool strends(const char *str, const char *suffix)
{
	unsigned int str_len = strlen(str), suffix_len = strlen(suffix);

	if (str_len < suffix_len)
		return false;

	return !(strcmp(str + str_len - suffix_len, suffix));
}

#endif /* _LINUX_STRING_H_ */
+13 −0
Original line number Diff line number Diff line
@@ -602,6 +602,18 @@ static void string_test_memtostr(struct kunit *test)
	KUNIT_EXPECT_EQ(test, dest[7], '\0');
}

static void string_test_strends(struct kunit *test)
{
	KUNIT_EXPECT_TRUE(test, strends("foo-bar", "bar"));
	KUNIT_EXPECT_TRUE(test, strends("foo-bar", "-bar"));
	KUNIT_EXPECT_TRUE(test, strends("foobar", "foobar"));
	KUNIT_EXPECT_TRUE(test, strends("foobar", ""));
	KUNIT_EXPECT_FALSE(test, strends("bar", "foobar"));
	KUNIT_EXPECT_FALSE(test, strends("", "foo"));
	KUNIT_EXPECT_FALSE(test, strends("foobar", "ba"));
	KUNIT_EXPECT_TRUE(test, strends("", ""));
}

static struct kunit_case string_test_cases[] = {
	KUNIT_CASE(string_test_memset16),
	KUNIT_CASE(string_test_memset32),
@@ -623,6 +635,7 @@ static struct kunit_case string_test_cases[] = {
	KUNIT_CASE(string_test_strlcat),
	KUNIT_CASE(string_test_strtomem),
	KUNIT_CASE(string_test_memtostr),
	KUNIT_CASE(string_test_strends),
	{}
};