| 134 | } |
| 135 | |
| 136 | bool cbm_str_ends_with(const char *s, const char *suffix) { |
| 137 | if (!s || !suffix) { |
| 138 | return false; |
| 139 | } |
| 140 | size_t slen = strlen(s); |
| 141 | size_t xlen = strlen(suffix); |
| 142 | if (xlen > slen) { |
| 143 | return false; |
| 144 | } |
| 145 | return strcmp(s + slen - xlen, suffix) == 0; |
| 146 | } |
| 147 | |
| 148 | bool cbm_str_contains(const char *s, const char *sub) { |
| 149 | if (!s || !sub) { |