summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gles3/shaders/canvas.glsl2
-rw-r--r--drivers/unix/dir_access_unix.cpp44
2 files changed, 24 insertions, 22 deletions
diff --git a/drivers/gles3/shaders/canvas.glsl b/drivers/gles3/shaders/canvas.glsl
index 3bcfd24383..df75191b5f 100644
--- a/drivers/gles3/shaders/canvas.glsl
+++ b/drivers/gles3/shaders/canvas.glsl
@@ -116,7 +116,7 @@ void main() {
#ifdef USE_TEXTURE_RECT
- if (dst_rect.z < 0) { // Transpose is encoded as negative dst_rect.z
+ if (dst_rect.z < 0.0) { // Transpose is encoded as negative dst_rect.z
uv_interp = src_rect.xy + abs(src_rect.zw) * vertex.yx;
} else {
uv_interp = src_rect.xy + abs(src_rect.zw) * vertex;
diff --git a/drivers/unix/dir_access_unix.cpp b/drivers/unix/dir_access_unix.cpp
index ddc3b2ed33..a4e4c79dbf 100644
--- a/drivers/unix/dir_access_unix.cpp
+++ b/drivers/unix/dir_access_unix.cpp
@@ -211,36 +211,38 @@ Error DirAccessUnix::make_dir(String p_dir) {
Error DirAccessUnix::change_dir(String p_dir) {
GLOBAL_LOCK_FUNCTION
- p_dir = fix_path(p_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?
+ // 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);
+ }
- 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
+ if (p_dir == ".") {
+ return OK;
+ }
- String base = _get_root_path();
- if (base != "") {
+ p_dir = fix_path(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;
- }
+ String prev_dir = current_dir;
- if (worked) {
+ 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);
- if (current_dir.parse_utf8(real_current_dir_name))
- current_dir = real_current_dir_name; //no utf8, maybe latin?
+ 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;
}
chdir(prev_dir.utf8().get_data());
- return worked ? OK : ERR_INVALID_PARAMETER;
+ return OK;
}
String DirAccessUnix::get_current_dir() {