This repository has been archived on 2025-02-04. You can view files and clone it, but cannot push or open issues or pull requests.
helpless/oogabooga/path_utils.c
2024-07-04 12:13:40 +02:00

54 lines
No EOL
1.5 KiB
C

// in "dir/file.ext" this returns "ext". Returns an empty string if there is no extension
string get_file_extension(string path) {
if (path.count <= 0) return ZERO(string);
for (s64 i = path.count-1; i >= 0; i--) {
if (path.data[i] == '/' || path.data[i] == '\\' || path.data[i] == ':') {
return ZERO(string);
}
if (path.data[i] == '.') {
string ext = ZERO(string);
ext.count = path.count-i;
if (ext.count > 0) ext.data = path.data+i;
return ext;
}
}
return ZERO(string);
}
string get_file_name_including_extension(string file_path) {
if (file_path.count <= 0) return ZERO(string);
s64 last_separator = -1;
for (s64 i = file_path.count - 1; i >= 0; i--) {
if (file_path.data[i] == '/' || file_path.data[i] == '\\' || file_path.data[i] == ':') {
last_separator = i;
break;
}
}
string file_name = ZERO(string);
if (last_separator != -1 && last_separator < file_path.count - 1) {
file_name.data = file_path.data + last_separator + 1;
file_name.count = file_path.count - last_separator - 1;
} else {
file_name = file_path; // If no separator was found, assume entire path is a file name.
}
return file_name;
}
string get_file_name_excluding_extension(string file_path) {
string file_name = get_file_name_including_extension(file_path);
for (s64 i = file_name.count-1; i >= 1; i--) {
if (file_name.data[i] == '.') {
return string_view(file_name, 0, i);
}
}
return file_name;
}