diff options
author | Bartosz Golaszewski | 2015-08-25 16:36:43 +0200 |
---|---|---|
committer | Denys Vlasenko | 2015-08-25 16:36:43 +0200 |
commit | 7448b513c84feb3fd06fc57b39f5ab450970c01e (patch) | |
tree | de8a5238b249f7c452d424b437357721971ece15 /libbb/compare_string_array.c | |
parent | 5b865deb3f2eafa1dcefabedf4af17a4c72f6cb8 (diff) | |
download | busybox-7448b513c84feb3fd06fc57b39f5ab450970c01e.zip busybox-7448b513c84feb3fd06fc57b39f5ab450970c01e.tar.gz |
libbb: add is_suffixed_with() function
Signed-off-by: Bartosz Golaszewski <bartekgola@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb/compare_string_array.c')
-rw-r--r-- | libbb/compare_string_array.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/libbb/compare_string_array.c b/libbb/compare_string_array.c index cdcb271..e0d8e42 100644 --- a/libbb/compare_string_array.c +++ b/libbb/compare_string_array.c @@ -28,6 +28,25 @@ char* FAST_FUNC is_prefixed_with(const char *string, const char *key) #endif } +/* + * Return NULL if string is not suffixed with key. Return pointer to the + * beginning of prefix key in string. If key is an empty string return pointer + * to the end of string. + */ +char* FAST_FUNC is_suffixed_with(const char *string, const char *key) +{ + size_t key_len = strlen(key); + ssize_t len_diff = strlen(string) - key_len; + + if (len_diff >= 0) { + if (strcmp(string + len_diff, key) == 0) { + return (char*)key; + } + } + + return NULL; +} + /* returns the array index of the string */ /* (index of first match is returned, or -1) */ int FAST_FUNC index_in_str_array(const char *const string_array[], const char *key) @@ -133,4 +152,18 @@ BBUNIT_DEFINE_TEST(is_prefixed_with) BBUNIT_ENDTEST; } +BBUNIT_DEFINE_TEST(is_suffixed_with) +{ + BBUNIT_ASSERT_STREQ("bar", is_suffixed_with("foo bar", "bar")); + BBUNIT_ASSERT_STREQ("foo", is_suffixed_with("foo", "foo")); + BBUNIT_ASSERT_STREQ("", is_suffixed_with("foo", "")); + BBUNIT_ASSERT_STREQ("", is_suffixed_with("", "")); + + BBUNIT_ASSERT_NULL(is_suffixed_with("foo", "bar foo")); + BBUNIT_ASSERT_NULL(is_suffixed_with("foo foo", "bar")); + BBUNIT_ASSERT_NULL(is_suffixed_with("", "foo")); + + BBUNIT_ENDTEST; +} + #endif /* ENABLE_UNIT_TEST */ |