diff options
-rw-r--r-- | drivers/gles3/rasterizer_storage_gles3.cpp | 4 | ||||
-rw-r--r-- | drivers/unix/dir_access_unix.cpp | 45 |
2 files changed, 27 insertions, 22 deletions
diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp index ea6ac569f0..24fa117051 100644 --- a/drivers/gles3/rasterizer_storage_gles3.cpp +++ b/drivers/gles3/rasterizer_storage_gles3.cpp @@ -5177,6 +5177,10 @@ void RasterizerStorageGLES3::particles_set_emitting(RID p_particles, bool p_emit Particles *particles = particles_owner.getornull(p_particles); ERR_FAIL_COND(!particles); + if (p_emitting != particles->emitting) { + // Restart is overriden by set_emitting + particles->restart_request = false; + } particles->emitting = p_emitting; } void RasterizerStorageGLES3::particles_set_amount(RID p_particles, int p_amount) { diff --git a/drivers/unix/dir_access_unix.cpp b/drivers/unix/dir_access_unix.cpp index cf54f3fea0..a183a37446 100644 --- a/drivers/unix/dir_access_unix.cpp +++ b/drivers/unix/dir_access_unix.cpp @@ -223,36 +223,37 @@ 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() { |