diff options
| author | Jeroen van Rijn <Kelimion@users.noreply.github.com> | 2024-04-20 12:08:12 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-20 12:08:12 +0200 |
| commit | caa8863c972a82c3d43fda9d56f3b41f90b2fe54 (patch) | |
| tree | 94825a7ddf1fae140f6488a74660c4aef952142a /src/string.cpp | |
| parent | 3620e62ff76f39100c0c6ba8032d0e3deb74225f (diff) | |
| parent | ebb1a07dd081bb9210e093ebac89f692cb8200d6 (diff) | |
Merge pull request #3455 from Hyrtwol/normalize-path
Normalize ODIN_ROOT path
Diffstat (limited to 'src/string.cpp')
| -rw-r--r-- | src/string.cpp | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/string.cpp b/src/string.cpp index 3747f4564..b92dd589e 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -237,11 +237,16 @@ gb_internal String string_split_iterator(String_Iterator *it, const char sep) { return substring(it->str, start, end); } +gb_internal gb_inline bool is_separator(u8 const &ch) { + return (ch == '/' || ch == '\\'); +} + + gb_internal gb_inline isize string_extension_position(String const &str) { isize dot_pos = -1; isize i = str.len; while (i --> 0) { - if (str[i] == '\\' || str[i] == '/') + if (is_separator(str[i])) break; if (str[i] == '.') { dot_pos = i; @@ -332,8 +337,7 @@ gb_internal String filename_from_path(String s) { if (i > 0) { isize j = 0; for (j = s.len-1; j >= 0; j--) { - if (s[j] == '/' || - s[j] == '\\') { + if (is_separator(s[j])) { break; } } @@ -346,8 +350,7 @@ gb_internal String filename_from_path(String s) { gb_internal String filename_without_directory(String s) { isize j = 0; for (j = s.len-1; j >= 0; j--) { - if (s[j] == '/' || - s[j] == '\\') { + if (is_separator(s[j])) { break; } } @@ -410,7 +413,26 @@ gb_internal String copy_string(gbAllocator a, String const &s) { return make_string(data, s.len); } - +gb_internal String normalize_path(gbAllocator a, String const &path, String const &sep) { + String s; + if (sep.len < 1) { + return path; + } + if (path.len < 1) { + s = STR_LIT(""); + } else if (is_separator(path[path.len-1])) { + s = copy_string(a, path); + } else { + s = concatenate_strings(a, path, sep); + } + isize i; + for (i = 0; i < s.len; i++) { + if (is_separator(s.text[i])) { + s.text[i] = sep.text[0]; + } + } + return s; +} #if defined(GB_SYSTEM_WINDOWS) |