浏览代码

Revert "Reworked change_dir to support symlinks"

Juan Linietsky 8 年之前
父节点
当前提交
247c2f7be3
共有 1 个文件被更改,包括 22 次插入23 次删除
  1. 22 23
      drivers/unix/dir_access_unix.cpp

+ 22 - 23
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
+	p_dir = fix_path(p_dir);
 
-	// 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;
-	}
+	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?
 
-	p_dir = fix_path(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 prev_dir = current_dir;
+	String base = _get_root_path();
+	if (base != "") {
 
-	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;
+		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() {