libbb: add is_suffixed_with() function
authorBartosz Golaszewski <bartekgola@gmail.com>
Tue, 25 Aug 2015 14:36:43 +0000 (16:36 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 25 Aug 2015 14:36:43 +0000 (16:36 +0200)
Signed-off-by: Bartosz Golaszewski <bartekgola@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
include/libbb.h
libbb/compare_string_array.c

index 2e20706e751373e69d903c2dfcce15de1e83a0a6..543214ea4aaa086d89d9c58ec1bd7a48bd14c0ee 100644 (file)
@@ -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;
index cdcb2718d450ab448cc3ae8ee027b0533c0f1aa6..e0d8e421b568498bf38474485742ff0c8982cfea 100644 (file)
@@ -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 */