Changeset 3621 in MondoRescue for branches/3.3/mindi-busybox/libbb/compare_string_array.c
- Timestamp:
- Dec 20, 2016, 4:07:32 PM (7 years ago)
- Location:
- branches/3.3
- Files:
-
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/3.3/mindi-busybox/libbb/compare_string_array.c
r2725 r3621 5 5 6 6 #include "libbb.h" 7 8 /* 9 * Return NULL if string is not prefixed with key. Return pointer to the 10 * first character in string after the prefix key. If key is an empty string, 11 * return pointer to the beginning of string. 12 */ 13 char* FAST_FUNC is_prefixed_with(const char *string, const char *key) 14 { 15 #if 0 /* Two passes over key - probably slower */ 16 int len = strlen(key); 17 if (strncmp(string, key, len) == 0) 18 return string + len; 19 return NULL; 20 #else /* Open-coded */ 21 while (*key != '\0') { 22 if (*key != *string) 23 return NULL; 24 key++; 25 string++; 26 } 27 return (char*)string; 28 #endif 29 } 30 31 /* 32 * Return NULL if string is not suffixed with key. Return pointer to the 33 * beginning of prefix key in string. If key is an empty string return pointer 34 * to the end of string. 35 */ 36 char* FAST_FUNC is_suffixed_with(const char *string, const char *key) 37 { 38 size_t key_len = strlen(key); 39 ssize_t len_diff = strlen(string) - key_len; 40 41 if (len_diff >= 0) { 42 string += len_diff; 43 if (strcmp(string, key) == 0) { 44 return (char*)string; 45 } 46 } 47 48 return NULL; 49 } 7 50 8 51 /* returns the array index of the string */ … … 40 83 { 41 84 int i; 42 int len = strlen(key); 43 if (len) { 85 if (key[0]) { 44 86 for (i = 0; string_array[i] != 0; i++) { 45 if ( strncmp(string_array[i], key, len) == 0) {87 if (is_prefixed_with(string_array[i], key)) { 46 88 return i; 47 89 } … … 94 136 } 95 137 #endif 138 139 #if ENABLE_UNIT_TEST 140 141 BBUNIT_DEFINE_TEST(is_prefixed_with) 142 { 143 BBUNIT_ASSERT_STREQ(" bar", is_prefixed_with("foo bar", "foo")); 144 BBUNIT_ASSERT_STREQ("bar", is_prefixed_with("foo bar", "foo ")); 145 BBUNIT_ASSERT_STREQ("", is_prefixed_with("foo", "foo")); 146 BBUNIT_ASSERT_STREQ("foo", is_prefixed_with("foo", "")); 147 BBUNIT_ASSERT_STREQ("", is_prefixed_with("", "")); 148 149 BBUNIT_ASSERT_NULL(is_prefixed_with("foo", "bar foo")); 150 BBUNIT_ASSERT_NULL(is_prefixed_with("foo foo", "bar")); 151 BBUNIT_ASSERT_NULL(is_prefixed_with("", "foo")); 152 153 BBUNIT_ENDTEST; 154 } 155 156 BBUNIT_DEFINE_TEST(is_suffixed_with) 157 { 158 BBUNIT_ASSERT_STREQ("bar", is_suffixed_with("foo bar", "bar")); 159 BBUNIT_ASSERT_STREQ("foo", is_suffixed_with("foo", "foo")); 160 BBUNIT_ASSERT_STREQ("", is_suffixed_with("foo", "")); 161 BBUNIT_ASSERT_STREQ("", is_suffixed_with("", "")); 162 BBUNIT_ASSERT_STREQ("foo", is_suffixed_with("barfoofoo", "foo")); 163 164 BBUNIT_ASSERT_NULL(is_suffixed_with("foo", "bar foo")); 165 BBUNIT_ASSERT_NULL(is_suffixed_with("foo foo", "bar")); 166 BBUNIT_ASSERT_NULL(is_suffixed_with("", "foo")); 167 168 BBUNIT_ENDTEST; 169 } 170 171 #endif /* ENABLE_UNIT_TEST */
Note:
See TracChangeset
for help on using the changeset viewer.