Fixed bug using DirAccess in Android Marshmallow due to data dir being a symlink

This commit is contained in:
Juan Linietsky 2016-07-02 11:46:15 -03:00
parent 673ef0cf88
commit 10eedf62b8
2 changed files with 28 additions and 2 deletions

View File

@ -703,8 +703,32 @@ void OS_Android::set_need_reload_hooks(bool p_needs_them) {
String OS_Android::get_data_dir() const { String OS_Android::get_data_dir() const {
if (get_data_dir_func) if (data_dir_cache!=String())
return get_data_dir_func(); return data_dir_cache;
if (get_data_dir_func) {
String data_dir=get_data_dir_func();
//store current dir
char real_current_dir_name[2048];
getcwd(real_current_dir_name,2048);
//go to data dir
chdir(data_dir.utf8().get_data());
//get actual data dir, so we resolve potential symlink (Android 6.0+ seems to use symlink)
char data_current_dir_name[2048];
getcwd(data_current_dir_name,2048);
//cache by parsing utf8
data_dir_cache.parse_utf8(data_current_dir_name);
//restore original dir so we don't mess things up
chdir(real_current_dir_name);
return data_dir_cache;
}
return "."; return ".";
//return Globals::get_singleton()->get_singleton_object("GodotOS")->call("get_data_dir"); //return Globals::get_singleton()->get_singleton_object("GodotOS")->call("get_data_dir");
}; };

View File

@ -114,6 +114,8 @@ private:
bool use_16bits_fbo; bool use_16bits_fbo;
mutable String data_dir_cache;
Rasterizer *rasterizer; Rasterizer *rasterizer;
VisualServer *visual_server; VisualServer *visual_server;
AudioServerSW *audio_server; AudioServerSW *audio_server;