#pragma once
#include "core/io/file_access.h"
#include "core/os/memory.h"
#include <cstdio>
#if defined(UNIX_ENABLED)
class FileAccessUnix : public FileAccess {
GDSOFTCLASS(FileAccessUnix, FileAccess);
FILE *f = nullptr;
int flags = 0;
void check_errors(bool p_write = false) const;
mutable Error last_error = OK;
String save_path;
String path;
String path_src;
void _close();
#if defined(TOOLS_ENABLED)
String get_real_path() const;
#endif
public:
typedef void (*CloseNotificationFunc)(const String &p_file, int p_flags);
static CloseNotificationFunc close_notification_func;
virtual Error open_internal(const String &p_path, int p_mode_flags) override;
virtual bool is_open() const override;
virtual String get_path() const override;
virtual String get_path_absolute() const override;
virtual void seek(uint64_t p_position) override;
virtual void seek_end(int64_t p_position = 0) override;
virtual uint64_t get_position() const override;
virtual uint64_t get_length() const override;
virtual bool eof_reached() const override;
virtual uint64_t get_buffer(uint8_t *p_dst, uint64_t p_length) const override;
virtual Error get_error() const override;
virtual Error resize(int64_t p_length) override;
virtual void flush() override;
virtual bool store_buffer(const uint8_t *p_src, uint64_t p_length) override;
virtual bool file_exists(const String &p_path) override;
virtual uint64_t _get_modified_time(const String &p_file) override;
virtual uint64_t _get_access_time(const String &p_file) override;
virtual int64_t _get_size(const String &p_file) override;
virtual BitField<FileAccess::UnixPermissionFlags> _get_unix_permissions(const String &p_file) override;
virtual Error _set_unix_permissions(const String &p_file, BitField<FileAccess::UnixPermissionFlags> p_permissions) override;
virtual bool _get_hidden_attribute(const String &p_file) override;
virtual Error _set_hidden_attribute(const String &p_file, bool p_hidden) override;
virtual bool _get_read_only_attribute(const String &p_file) override;
virtual Error _set_read_only_attribute(const String &p_file, bool p_ro) override;
virtual PackedByteArray _get_extended_attribute(const String &p_file, const String &p_attribute_name) override;
virtual Error _set_extended_attribute(const String &p_file, const String &p_attribute_name, const PackedByteArray &p_data) override;
virtual Error _remove_extended_attribute(const String &p_file, const String &p_attribute_name) override;
virtual PackedStringArray _get_extended_attributes_list(const String &p_file) override;
virtual void close() override;
FileAccessUnix() {}
virtual ~FileAccessUnix();
};
#endif