|
@@ -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);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // if try_dir is nothing, it is not changing directory so change it to a "." otherwise chdir will fail
|
|
|
|
+ if (try_dir == "") {
|
|
|
|
+ try_dir = ".";
|
|
}
|
|
}
|
|
|
|
|
|
- bool worked = (chdir(current_dir.utf8().get_data()) == 0); // we can only give this utf8
|
|
|
|
|
|
+ //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;
|
|
}
|
|
}
|
|
|
|
|