summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartosz Golaszewski2015-08-25 16:36:43 +0200
committerDenys Vlasenko2015-08-25 16:36:43 +0200
commit7448b513c84feb3fd06fc57b39f5ab450970c01e (patch)
treede8a5238b249f7c452d424b437357721971ece15
parent5b865deb3f2eafa1dcefabedf4af17a4c72f6cb8 (diff)
downloadbusybox-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>
-rw-r--r--include/libbb.h1
-rw-r--r--libbb/compare_string_array.c33
2 files changed, 34 insertions, 0 deletions
diff --git a/include/libbb.h b/include/libbb.h
index 2e20706..543214e 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -413,6 +413,7 @@ const char *bb_basename(const char *name) FAST_FUNC;
char *last_char_is(const char *s, int c) FAST_FUNC;
const char* endofname(const char *name) FAST_FUNC;
char *is_prefixed_with(const char *string, const char *key) FAST_FUNC;
+char *is_suffixed_with(const char *string, const char *key) FAST_FUNC;
int ndelay_on(int fd) FAST_FUNC;
int ndelay_off(int fd) FAST_FUNC;
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 */