You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-19 14:31:59 +00:00
Add FileAccess::set_unix_permissions for Unix platforms
This commit is contained in:
@@ -143,6 +143,14 @@ public:
|
||||
return f._get_modified_time(p_file);
|
||||
}
|
||||
|
||||
virtual uint32_t _get_unix_permissions(const String &p_file) {
|
||||
return f._get_unix_permissions(p_file);
|
||||
}
|
||||
|
||||
virtual Error _set_unix_permissions(const String &p_file, uint32_t p_permissions) {
|
||||
return f._set_unix_permissions(p_file, p_permissions);
|
||||
}
|
||||
|
||||
FileAccessBufferedFA(){
|
||||
|
||||
};
|
||||
|
||||
@@ -373,6 +373,19 @@ uint64_t FileAccessCompressed::_get_modified_time(const String &p_file) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t FileAccessCompressed::_get_unix_permissions(const String &p_file) {
|
||||
if (f)
|
||||
return f->_get_unix_permissions(p_file);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Error FileAccessCompressed::_set_unix_permissions(const String &p_file, uint32_t p_permissions) {
|
||||
if (f) {
|
||||
return f->_set_unix_permissions(p_file, p_permissions);
|
||||
}
|
||||
return FAILED;
|
||||
}
|
||||
|
||||
FileAccessCompressed::FileAccessCompressed() :
|
||||
cmode(Compression::MODE_ZSTD),
|
||||
writing(false),
|
||||
|
||||
@@ -91,6 +91,8 @@ public:
|
||||
virtual bool file_exists(const String &p_name); ///< return true if a file exists
|
||||
|
||||
virtual uint64_t _get_modified_time(const String &p_file);
|
||||
virtual uint32_t _get_unix_permissions(const String &p_file);
|
||||
virtual Error _set_unix_permissions(const String &p_file, uint32_t p_permissions);
|
||||
|
||||
FileAccessCompressed();
|
||||
virtual ~FileAccessCompressed();
|
||||
|
||||
@@ -301,6 +301,16 @@ uint64_t FileAccessEncrypted::_get_modified_time(const String &p_file) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t FileAccessEncrypted::_get_unix_permissions(const String &p_file) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Error FileAccessEncrypted::_set_unix_permissions(const String &p_file, uint32_t p_permissions) {
|
||||
|
||||
return FAILED;
|
||||
}
|
||||
|
||||
FileAccessEncrypted::FileAccessEncrypted() {
|
||||
|
||||
file = NULL;
|
||||
|
||||
@@ -79,6 +79,8 @@ public:
|
||||
virtual bool file_exists(const String &p_name); ///< return true if a file exists
|
||||
|
||||
virtual uint64_t _get_modified_time(const String &p_file);
|
||||
virtual uint32_t _get_unix_permissions(const String &p_file);
|
||||
virtual Error _set_unix_permissions(const String &p_file, uint32_t p_permissions);
|
||||
|
||||
FileAccessEncrypted();
|
||||
~FileAccessEncrypted();
|
||||
|
||||
@@ -70,6 +70,8 @@ public:
|
||||
virtual bool file_exists(const String &p_name); ///< return true if a file exists
|
||||
|
||||
virtual uint64_t _get_modified_time(const String &p_file) { return 0; }
|
||||
virtual uint32_t _get_unix_permissions(const String &p_file) { return 0; }
|
||||
virtual Error _set_unix_permissions(const String &p_file, uint32_t p_permissions) { return FAILED; }
|
||||
|
||||
FileAccessMemory();
|
||||
};
|
||||
|
||||
@@ -497,6 +497,16 @@ uint64_t FileAccessNetwork::_get_modified_time(const String &p_file) {
|
||||
return exists_modtime;
|
||||
}
|
||||
|
||||
uint32_t FileAccessNetwork::_get_unix_permissions(const String &p_file) {
|
||||
//could be implemented, not sure if worth it
|
||||
return 0;
|
||||
}
|
||||
|
||||
Error FileAccessNetwork::_set_unix_permissions(const String &p_file, uint32_t p_permissions) {
|
||||
|
||||
return FAILED;
|
||||
}
|
||||
|
||||
void FileAccessNetwork::configure() {
|
||||
|
||||
GLOBAL_DEF("network/remote_fs/page_size", 65536);
|
||||
|
||||
@@ -159,6 +159,8 @@ public:
|
||||
virtual bool file_exists(const String &p_path); ///< return true if a file exists
|
||||
|
||||
virtual uint64_t _get_modified_time(const String &p_file);
|
||||
virtual uint32_t _get_unix_permissions(const String &p_file);
|
||||
virtual Error _set_unix_permissions(const String &p_file, uint32_t p_permissions);
|
||||
|
||||
static void configure();
|
||||
|
||||
|
||||
@@ -142,6 +142,8 @@ class FileAccessPack : public FileAccess {
|
||||
FileAccess *f;
|
||||
virtual Error _open(const String &p_path, int p_mode_flags);
|
||||
virtual uint64_t _get_modified_time(const String &p_file) { return 0; }
|
||||
virtual uint32_t _get_unix_permissions(const String &p_file) { return 0; }
|
||||
virtual Error _set_unix_permissions(const String &p_file, uint32_t p_permissions) { return FAILED; }
|
||||
|
||||
public:
|
||||
virtual void close();
|
||||
|
||||
@@ -112,6 +112,8 @@ public:
|
||||
virtual bool file_exists(const String &p_name); ///< return true if a file exists
|
||||
|
||||
virtual uint64_t _get_modified_time(const String &p_file) { return 0; } // todo
|
||||
virtual uint32_t _get_unix_permissions(const String &p_file) { return 0; }
|
||||
virtual Error _set_unix_permissions(const String &p_file, uint32_t p_permissions) { return FAILED; }
|
||||
|
||||
FileAccessZip(const String &p_path, const PackedData::PackedFile &p_file);
|
||||
~FileAccessZip();
|
||||
|
||||
@@ -330,7 +330,7 @@ Error DirAccess::copy(String p_from, String p_to, int p_chmod_flags) {
|
||||
|
||||
if (err == OK && p_chmod_flags != -1) {
|
||||
fdst->close();
|
||||
err = fdst->_chmod(p_to, p_chmod_flags);
|
||||
err = FileAccess::set_unix_permissions(p_to, p_chmod_flags);
|
||||
// If running on a platform with no chmod support (i.e., Windows), don't fail
|
||||
if (err == ERR_UNAVAILABLE)
|
||||
err = OK;
|
||||
|
||||
@@ -507,6 +507,29 @@ uint64_t FileAccess::get_modified_time(const String &p_file) {
|
||||
return mt;
|
||||
}
|
||||
|
||||
uint32_t FileAccess::get_unix_permissions(const String &p_file) {
|
||||
|
||||
if (PackedData::get_singleton() && !PackedData::get_singleton()->is_disabled() && PackedData::get_singleton()->has_path(p_file))
|
||||
return 0;
|
||||
|
||||
FileAccess *fa = create_for_path(p_file);
|
||||
ERR_FAIL_COND_V(!fa, 0);
|
||||
|
||||
uint32_t mt = fa->_get_unix_permissions(p_file);
|
||||
memdelete(fa);
|
||||
return mt;
|
||||
}
|
||||
|
||||
Error FileAccess::set_unix_permissions(const String &p_file, uint32_t p_permissions) {
|
||||
|
||||
FileAccess *fa = create_for_path(p_file);
|
||||
ERR_FAIL_COND_V(!fa, ERR_CANT_CREATE);
|
||||
|
||||
Error err = fa->_set_unix_permissions(p_file, p_permissions);
|
||||
memdelete(fa);
|
||||
return err;
|
||||
}
|
||||
|
||||
void FileAccess::store_string(const String &p_string) {
|
||||
|
||||
if (p_string.length() == 0)
|
||||
|
||||
@@ -56,6 +56,9 @@ public:
|
||||
bool endian_swap;
|
||||
bool real_is_double;
|
||||
|
||||
virtual uint32_t _get_unix_permissions(const String &p_file) = 0;
|
||||
virtual Error _set_unix_permissions(const String &p_file, uint32_t p_permissions) = 0;
|
||||
|
||||
protected:
|
||||
String fix_path(const String &p_path) const;
|
||||
virtual Error _open(const String &p_path, int p_mode_flags) = 0; ///< open a file
|
||||
@@ -148,14 +151,14 @@ public:
|
||||
|
||||
virtual Error reopen(const String &p_path, int p_mode_flags); ///< does not change the AccessType
|
||||
|
||||
virtual Error _chmod(const String &p_path, int p_mod) { return ERR_UNAVAILABLE; }
|
||||
|
||||
static FileAccess *create(AccessType p_access); /// Create a file access (for the current platform) this is the only portable way of accessing files.
|
||||
static FileAccess *create_for_path(const String &p_path);
|
||||
static FileAccess *open(const String &p_path, int p_mode_flags, Error *r_error = NULL); /// Create a file access (for the current platform) this is the only portable way of accessing files.
|
||||
static CreateFunc get_create_func(AccessType p_access);
|
||||
static bool exists(const String &p_name); ///< return true if a file exists
|
||||
static uint64_t get_modified_time(const String &p_file);
|
||||
static uint32_t get_unix_permissions(const String &p_file);
|
||||
static Error set_unix_permissions(const String &p_file, uint32_t p_permissions);
|
||||
|
||||
static void set_backup_save(bool p_enable) { backup_save = p_enable; };
|
||||
static bool is_backup_save_enabled() { return backup_save; };
|
||||
|
||||
@@ -45,6 +45,8 @@
|
||||
@author Juan Linietsky <reduzio@gmail.com>
|
||||
*/
|
||||
|
||||
class Mutex;
|
||||
|
||||
class OS {
|
||||
|
||||
static OS *singleton;
|
||||
@@ -260,7 +262,7 @@ public:
|
||||
virtual int get_low_processor_usage_mode_sleep_usec() const;
|
||||
|
||||
virtual String get_executable_path() const;
|
||||
virtual Error execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id = NULL, String *r_pipe = NULL, int *r_exitcode = NULL, bool read_stderr = false) = 0;
|
||||
virtual Error execute(const String &p_path, const List<String> &p_arguments, bool p_blocking, ProcessID *r_child_id = NULL, String *r_pipe = NULL, int *r_exitcode = NULL, bool read_stderr = false, Mutex *p_pipe_mutex = NULL) = 0;
|
||||
virtual Error kill(const ProcessID &p_pid) = 0;
|
||||
virtual int get_process_id() const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user