diff options
Diffstat (limited to 'libbb/compare_string_array.c')
| -rw-r--r-- | libbb/compare_string_array.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libbb/compare_string_array.c b/libbb/compare_string_array.c index d8cd033a3..70a4c29cf 100644 --- a/libbb/compare_string_array.c +++ b/libbb/compare_string_array.c | |||
| @@ -27,11 +27,25 @@ char* FAST_FUNC is_prefixed_with(const char *string, const char *key) | |||
| 27 | #endif | 27 | #endif |
| 28 | } | 28 | } |
| 29 | 29 | ||
| 30 | #if ENABLE_PLATFORM_MINGW32 | ||
| 31 | char* FAST_FUNC is_prefixed_with_case(const char *string, const char *key) | ||
| 32 | { | ||
| 33 | while (*key != '\0') { | ||
| 34 | if (tolower(*key) != tolower(*string)) | ||
| 35 | return NULL; | ||
| 36 | key++; | ||
| 37 | string++; | ||
| 38 | } | ||
| 39 | return (char*)string; | ||
| 40 | } | ||
| 41 | #endif | ||
| 42 | |||
| 30 | /* | 43 | /* |
| 31 | * Return NULL if string is not suffixed with key. Return pointer to the | 44 | * Return NULL if string is not suffixed with key. Return pointer to the |
| 32 | * beginning of prefix key in string. If key is an empty string return pointer | 45 | * beginning of prefix key in string. If key is an empty string return pointer |
| 33 | * to the end of string. | 46 | * to the end of string. |
| 34 | */ | 47 | */ |
| 48 | #if !ENABLE_PLATFORM_MINGW32 | ||
| 35 | char* FAST_FUNC is_suffixed_with(const char *string, const char *key) | 49 | char* FAST_FUNC is_suffixed_with(const char *string, const char *key) |
| 36 | { | 50 | { |
| 37 | size_t key_len = strlen(key); | 51 | size_t key_len = strlen(key); |
| @@ -46,6 +60,33 @@ char* FAST_FUNC is_suffixed_with(const char *string, const char *key) | |||
| 46 | 60 | ||
| 47 | return NULL; | 61 | return NULL; |
| 48 | } | 62 | } |
| 63 | #else | ||
| 64 | static char* FAST_FUNC is_suffixed(const char *string, const char *key, | ||
| 65 | int (*fn)(const char *, const char*)) | ||
| 66 | { | ||
| 67 | size_t key_len = strlen(key); | ||
| 68 | ssize_t len_diff = strlen(string) - key_len; | ||
| 69 | |||
| 70 | if (len_diff >= 0) { | ||
| 71 | string += len_diff; | ||
| 72 | if (fn(string, key) == 0) { | ||
| 73 | return (char*)string; | ||
| 74 | } | ||
| 75 | } | ||
| 76 | |||
| 77 | return NULL; | ||
| 78 | } | ||
| 79 | |||
| 80 | char* FAST_FUNC is_suffixed_with(const char *string, const char *key) | ||
| 81 | { | ||
| 82 | return is_suffixed(string, key, strcmp); | ||
| 83 | } | ||
| 84 | |||
| 85 | char* FAST_FUNC is_suffixed_with_case(const char *string, const char *key) | ||
| 86 | { | ||
| 87 | return is_suffixed(string, key, strcasecmp); | ||
| 88 | } | ||
| 89 | #endif | ||
| 49 | 90 | ||
| 50 | /* returns the array index of the string */ | 91 | /* returns the array index of the string */ |
| 51 | /* (index of first match is returned, or -1) */ | 92 | /* (index of first match is returned, or -1) */ |
