1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-13 13:31:48 +00:00

Further symlink fixes

This commit is contained in:
supagu
2017-09-06 18:09:27 +09:30
parent 4d73b778f0
commit f4994e750d

View File

@@ -212,36 +212,46 @@ Error DirAccessUnix::change_dir(String p_dir) {
GLOBAL_LOCK_FUNCTION GLOBAL_LOCK_FUNCTION
// make sure current_dir is valid absolute path
if (current_dir == "." || current_dir == "") {
char real_current_dir_name[2048];
getcwd(real_current_dir_name, 2048);
current_dir.parse_utf8(real_current_dir_name);
}
if (p_dir == ".") {
return OK;
}
p_dir = fix_path(p_dir); p_dir = fix_path(p_dir);
String prev_dir = current_dir; // prev_dir is the directory we are changing out of
String prev_dir;
char real_current_dir_name[2048];
getcwd(real_current_dir_name, 2048);
if (prev_dir.parse_utf8(real_current_dir_name))
prev_dir = real_current_dir_name; //no utf8, maybe latin?
//print_line("directory we are changing out of (prev_dir): " + prev_dir);
// try_dir is the directory we are trying to change into
String try_dir = "";
if (p_dir.is_rel_path()) { if (p_dir.is_rel_path()) {
String next_dir = current_dir + "/" + p_dir; String next_dir = current_dir + "/" + p_dir;
//print_line("p_dir is relative: " + p_dir + " about to simplfy: " + next_dir);
next_dir = next_dir.simplify_path(); next_dir = next_dir.simplify_path();
current_dir = next_dir; try_dir = next_dir;
} else { } else {
current_dir = p_dir; try_dir = p_dir;
//print_line("p_dir is absolute: " + p_dir);
} }
bool worked = (chdir(current_dir.utf8().get_data()) == 0); // we can only give this utf8 // if try_dir is nothing, it is not changing directory so change it to a "." otherwise chdir will fail
if (try_dir == "") {
try_dir = ".";
}
//print_line("directory we are changing in to (try_dir): " + try_dir);
bool worked = (chdir(try_dir.utf8().get_data()) == 0); // we can only give this utf8
if (!worked) { if (!worked) {
current_dir = prev_dir; //print_line("directory does not exist");
return ERR_INVALID_PARAMETER; return ERR_INVALID_PARAMETER;
} }
// the directory exists, so set current_dir to try_dir
current_dir = try_dir;
chdir(prev_dir.utf8().get_data()); chdir(prev_dir.utf8().get_data());
//print_line("directory exists, setting current_dir to: " + current_dir);
return OK; return OK;
} }