From 247c2f7be3fb88575f207f7bd0325ed842cc6a83 Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Mon, 21 Aug 2017 18:06:01 -0300 Subject: [PATCH] Revert "Reworked change_dir to support symlinks" --- drivers/unix/dir_access_unix.cpp | 47 ++++++++++++++++---------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/drivers/unix/dir_access_unix.cpp b/drivers/unix/dir_access_unix.cpp index a183a374467..cf54f3fea0c 100644 --- a/drivers/unix/dir_access_unix.cpp +++ b/drivers/unix/dir_access_unix.cpp @@ -223,37 +223,36 @@ Error DirAccessUnix::make_dir(String p_dir) { Error DirAccessUnix::change_dir(String p_dir) { 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); - String prev_dir = current_dir; + char real_current_dir_name[2048]; + getcwd(real_current_dir_name, 2048); + String prev_dir; + if (prev_dir.parse_utf8(real_current_dir_name)) + prev_dir = real_current_dir_name; //no utf8, maybe latin? - if (p_dir.is_rel_path()) { - String next_dir = current_dir + "/" + p_dir; - next_dir = next_dir.simplify_path(); - current_dir = next_dir; - } else { - current_dir = p_dir; + chdir(current_dir.utf8().get_data()); //ascii since this may be unicode or wathever the host os wants + bool worked = (chdir(p_dir.utf8().get_data()) == 0); // we can only give this utf8 + + String base = _get_root_path(); + if (base != "") { + + getcwd(real_current_dir_name, 2048); + String new_dir; + new_dir.parse_utf8(real_current_dir_name); + if (!new_dir.begins_with(base)) + worked = false; } - bool worked = (chdir(current_dir.utf8().get_data()) == 0); // we can only give this utf8 - if (!worked) { - current_dir = prev_dir; - return ERR_INVALID_PARAMETER; + if (worked) { + + getcwd(real_current_dir_name, 2048); + if (current_dir.parse_utf8(real_current_dir_name)) + current_dir = real_current_dir_name; //no utf8, maybe latin? } - return OK; + chdir(prev_dir.utf8().get_data()); + return worked ? OK : ERR_INVALID_PARAMETER; } String DirAccessUnix::get_current_dir() {