diff options
Diffstat (limited to 'src/string.c')
| -rw-r--r-- | src/string.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/src/string.c b/src/string.c index 8558616bf..38874a7d5 100644 --- a/src/string.c +++ b/src/string.c @@ -145,16 +145,37 @@ gb_inline isize string_extension_position(String str) { return dot_pos; } +String string_trim_whitespace(String str) { + while (str.len > 0 && rune_is_whitespace(str.text[str.len-1])) { + str.len--; + } + + while (str.len > 0 && rune_is_whitespace(str.text[0])) { + str.text++; + str.len--; + } + + return str; +} + gb_inline bool string_has_extension(String str, String ext) { - if (str.len > ext.len+1) { - u8 *s = str.text+str.len - ext.len-1; - if (s[0] == '.') { - s++; - return gb_memcompare(s, ext.text, ext.len) == 0; + str = string_trim_whitespace(str); + if (str.len <= ext.len+1) { + return false; + } + isize len = str.len; + for (isize i = len-1; i >= 0; i--) { + if (str.text[i] == '.') { + break; } + len--; + } + if (len == 0) { return false; } - return false; + + u8 *s = str.text + len; + return gb_memcompare(s, ext.text, ext.len) == 0; } bool string_contains_char(String s, u8 c) { |