You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Add OS.get_external_data_dir() to get Android external directory
This commit is contained in:
@@ -45,6 +45,23 @@
|
||||
#include "java_godot_io_wrapper.h"
|
||||
#include "java_godot_wrapper.h"
|
||||
|
||||
String _remove_symlink(const String &dir) {
|
||||
// Workaround for Android 6.0+ using a symlink.
|
||||
// Save the current directory.
|
||||
char current_dir_name[2048];
|
||||
getcwd(current_dir_name, 2048);
|
||||
// Change directory to the external data directory.
|
||||
chdir(dir.utf8().get_data());
|
||||
// Get the actual directory without the potential symlink.
|
||||
char dir_name_wihout_symlink[2048];
|
||||
getcwd(dir_name_wihout_symlink, 2048);
|
||||
// Convert back to a String.
|
||||
String dir_without_symlink(dir_name_wihout_symlink);
|
||||
// Restore original current directory.
|
||||
chdir(current_dir_name);
|
||||
return dir_without_symlink;
|
||||
}
|
||||
|
||||
class AndroidLogger : public Logger {
|
||||
public:
|
||||
virtual void logv(const char *p_format, va_list p_list, bool p_err) {
|
||||
@@ -199,26 +216,18 @@ String OS_Android::get_user_data_dir() const {
|
||||
|
||||
String data_dir = godot_io_java->get_user_data_dir();
|
||||
if (data_dir != "") {
|
||||
//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);
|
||||
|
||||
data_dir_cache = _remove_symlink(data_dir);
|
||||
return data_dir_cache;
|
||||
}
|
||||
return ".";
|
||||
}
|
||||
|
||||
String OS_Android::get_external_data_dir() const {
|
||||
String data_dir = godot_io_java->get_external_data_dir();
|
||||
if (data_dir != "") {
|
||||
data_dir = _remove_symlink(data_dir);
|
||||
return data_dir;
|
||||
}
|
||||
return ".";
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user