summaryrefslogtreecommitdiff
path: root/drivers/unix/dir_access_unix.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/unix/dir_access_unix.cpp')
-rw-r--r--drivers/unix/dir_access_unix.cpp36
1 files changed, 19 insertions, 17 deletions
diff --git a/drivers/unix/dir_access_unix.cpp b/drivers/unix/dir_access_unix.cpp
index a4e4c79dbf..6b8038c3ef 100644
--- a/drivers/unix/dir_access_unix.cpp
+++ b/drivers/unix/dir_access_unix.cpp
@@ -212,35 +212,32 @@ 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;
+ // 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?
+ // try_dir is the directory we are trying to change into
+ String try_dir = "";
if (p_dir.is_rel_path()) {
String next_dir = current_dir + "/" + p_dir;
next_dir = next_dir.simplify_path();
- current_dir = next_dir;
+ try_dir = next_dir;
} else {
- current_dir = p_dir;
+ try_dir = p_dir;
}
- bool worked = (chdir(current_dir.utf8().get_data()) == 0); // we can only give this utf8
+ bool worked = (chdir(try_dir.utf8().get_data()) == 0); // we can only give this utf8
if (!worked) {
- current_dir = prev_dir;
return ERR_INVALID_PARAMETER;
}
+ // the directory exists, so set current_dir to try_dir
+ current_dir = try_dir;
chdir(prev_dir.utf8().get_data());
return OK;
}
@@ -309,11 +306,16 @@ size_t DirAccessUnix::get_space_left() {
DirAccessUnix::DirAccessUnix() {
dir_stream = 0;
- current_dir = ".";
_cisdir = false;
/* determine drive count */
+ // set current directory to an absolute path of the current directory
+ char real_current_dir_name[2048];
+ getcwd(real_current_dir_name, 2048);
+ if (current_dir.parse_utf8(real_current_dir_name))
+ current_dir = real_current_dir_name;
+
change_dir(current_dir);
}