51enum class SeekOrigin : u8 {
63 be_u64 last_access_time;
64 be_u64 last_write_time;
77 void Write(u8* base, u32 guest_address) {
78 u8* dst = base + guest_address;
79 u8* src =
reinterpret_cast<u8*
>(
this);
85 left->file_index = right->file_index;
86 left->creation_time = right->creation_time;
87 left->last_access_time = right->last_access_time;
88 left->last_write_time = right->last_write_time;
89 left->change_time = right->change_time;
90 left->end_of_file = right->end_of_file;
92 left->attributes = right->attributes;
101REX_STATIC_ASSERT_SIZE(X_FILE_DIRECTORY_INFORMATION, 0x48);
116 virtual X_STATUS Read(u32 buffer_address, u32 buffer_length, u64 byte_offset, u32* out_bytes_read,
117 u32 apc_context,
bool notify_completion =
true) = 0;
126 virtual X_STATUS Write(u32 buffer_address, u32 buffer_length, u64 byte_offset,
127 u32* out_bytes_written, u32 apc_context) = 0;
135 virtual u64
Seek(i64 distance, SeekOrigin origin) = 0;
154 virtual std::optional<filesystem::FileStat>
FindNext() = 0;
156 virtual u64 GetSize() = 0;
158 virtual std::string GetAbsolutePath() = 0;
170 std::unique_ptr<filesystem::IFile> file;
181 bool is_synchronous =
false;
195 u64 byte_offset, u32* out_bytes_read, u32 apc_context);
206 u64 byte_offset, u32* out_bytes_read, u32 apc_context,
207 bool notify_completion =
true);
209 X_STATUS Read(u32 buffer_address, u32 buffer_length, u64 byte_offset, u32* out_bytes_read,
210 u32 apc_context,
bool notify_completion =
true)
override {
211 return Read(*
owner, buffer_address, buffer_length, byte_offset, out_bytes_read, apc_context,
223 u64 byte_offset, u32* out_bytes_written, u32 apc_context);
225 X_STATUS Write(u32 buffer_address, u32 buffer_length, u64 byte_offset, u32* out_bytes_written,
226 u32 apc_context)
override {
227 return Write(*
owner, buffer_address, buffer_length, byte_offset, out_bytes_written,
242 std::string_view file_name,
bool restart);
293 u64 byte_offset, u32* out_bytes_read, u32 apc_context,
294 bool notify_completion);
Definition directory.h:22
Definition file_system.h:37
Definition object_table.h:42
Definition file_object.h:104
virtual X_STATUS Write(u32 buffer_address, u32 buffer_length, u64 byte_offset, u32 *out_bytes_written, u32 apc_context)=0
virtual u64 Seek(i64 distance, SeekOrigin origin)=0
virtual X_STATUS Read(u32 buffer_address, u32 buffer_length, u64 byte_offset, u32 *out_bytes_read, u32 apc_context, bool notify_completion=true)=0
virtual std::optional< filesystem::FileStat > FindNext()=0
virtual void SetFindPattern(std::string_view pattern)=0
virtual X_STATUS SetLengthToPosition()=0
Definition title_runtime.h:85
u32 X_STATUS
Definition status.h:23
Definition file_stat.h:45
std::mutex completion_port_lock
Definition file_object.h:174
IObjectTable * port_table
Definition file_object.h:178
TitleRuntime * owner
Definition file_object.h:183
std::mutex file_lock
Definition file_object.h:173
X_STATUS SetLengthToPosition() override
void RegisterIOCompletionPort(TitleRuntime &runtime, u32 key, X_HANDLE port)
PropagateConst< std::unique_ptr< filesystem::IDirectory > > find
Definition file_object.h:180
std::optional< filesystem::FileStat > FindNext() override
FileObject(std::unique_ptr< filesystem::IFile > file_in, bool synchronous)
X_STATUS SetAllocation(u64 size)
X_STATUS SetLength(u64 length)
X_STATUS Write(u32 buffer_address, u32 buffer_length, u64 byte_offset, u32 *out_bytes_written, u32 apc_context) override
Definition file_object.h:225
void SetFindPattern(std::string_view pattern) override
X_STATUS QueryDirectory(TitleRuntime &runtime, X_FILE_DIRECTORY_INFORMATION *out_info, size_t length, std::string_view file_name, bool restart)
std::unique_ptr< rex::platform::Event > async_event
Definition file_object.h:172
X_STATUS Write(TitleRuntime &runtime, u32 buffer_address, u32 buffer_length, u64 byte_offset, u32 *out_bytes_written, u32 apc_context)
X_STATUS ReadScatter(TitleRuntime &runtime, u32 segments_address, u32 length, u64 byte_offset, u32 *out_bytes_read, u32 apc_context)
X_STATUS Rename(filesystem::IFileSystem &file_system, std::string_view path, bool replace_existing, FileObject *root)
u64 Seek(i64 distance, SeekOrigin origin) override
std::vector< std::pair< u32, X_HANDLE > > completion_ports
Definition file_object.h:176
X_STATUS Read(u32 buffer_address, u32 buffer_length, u64 byte_offset, u32 *out_bytes_read, u32 apc_context, bool notify_completion=true) override
Definition file_object.h:209
X_STATUS Read(TitleRuntime &runtime, u32 buffer_address, u32 buffer_length, u64 byte_offset, u32 *out_bytes_read, u32 apc_context, bool notify_completion=true)
Wait objects and wait functions.
Integer types, byte order wrappers and size literals.
Move only function, const propagating pointer and scope guard.