50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
|
/*
|
||
|
* Mr. 4th Dimention - Allen Webster
|
||
|
*
|
||
|
* 18.07.2017
|
||
|
*
|
||
|
* Cross platform logic for work queues.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
// TOP
|
||
|
|
||
|
internal u32
|
||
|
directory_cd(char *dir, i32 *len, i32 cap, char *rel_path, i32 rel_len, char slash){
|
||
|
String directory = make_string_cap(dir, *len, cap);
|
||
|
b32 result = false;
|
||
|
|
||
|
if (rel_path[0] != 0){
|
||
|
if (rel_path[0] == '.' && rel_path[1] == 0){
|
||
|
result = true;
|
||
|
}
|
||
|
else if (rel_path[0] == '.' && rel_path[1] == '.' && rel_path[2] == 0){
|
||
|
result = remove_last_folder(&directory);
|
||
|
terminate_with_null(&directory);
|
||
|
}
|
||
|
else{
|
||
|
if (directory.size + rel_len + 1 > directory.memory_size){
|
||
|
i32 old_size = directory.size;
|
||
|
append_partial_sc(&directory, rel_path);
|
||
|
append_s_char(&directory, slash);
|
||
|
terminate_with_null(&directory);
|
||
|
|
||
|
if (system_directory_exists(directory.str)){
|
||
|
result = true;
|
||
|
}
|
||
|
else{
|
||
|
directory.size = old_size;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
*len = directory.size;
|
||
|
LOGF("%.*s: %d\n", directory.size, directory.str, result);
|
||
|
|
||
|
return(result);
|
||
|
}
|
||
|
|
||
|
// BOTTOM
|
||
|
|