1#ifndef SEAD_FILEDEVICE_H_
2#define SEAD_FILEDEVICE_H_
4#include <basis/seadAssert.h>
5#include <container/seadSafeArray.h>
6#include <container/seadTList.h>
7#include <heap/seadDisposer.h>
8#include <heap/seadHeap.h>
9#include <prim/seadRuntimeTypeInfo.h>
10#include <prim/seadSafeString.h>
48static_assert(
sizeof(
HandleBase) == 0x38,
"sead::HandleBase size mismatch");
79 static const s32 cBufferMinAlignment = 32;
121 static_assert(
sizeof(
LoadArg) == 0x28,
"sead::FileDevice::LoadArg size mismatch");
131 mDriveName.copy(default_drive_name);
143 mDriveName.copy(drive_name);
160 u8* ret = tryLoad(arg);
175 FileDevice* device = tryOpen(handle, filename, flag, div_size);
176 SEAD_ASSERT_MSG(device !=
nullptr,
"open failed. [%s]", filename.cstr());
194 bool success = tryRead(&read_size, handle, buf, size);
204 bool success = tryWrite(&write_size, handle, buf, size);
213 bool success = trySeek(handle, offset, origin);
223 bool success = tryGetCurrentSeekPos(&pos, handle);
233 bool success = tryGetFileSize(&size, path);
241 bool success = tryGetFileSize(&size, handle);
251 bool is_exist =
false;
261 bool is_exist =
false;
272 SEAD_ASSERT_MSG(device !=
nullptr,
"open directory failed. [%s]", dirname.cstr());
290 bool success = tryReadDirectory(&read_num, handle, entry, num);
299 bool success = tryMakeDirectory(path, permission);
308 bool success = tryMakeDirectoryWithParent(path, permission);
372static_assert(
sizeof(
FileDevice) == 0x54,
"sead::FileDevice size mismatch");
387 if (device !=
nullptr)
397 bool tryRead(u32* read_size, u8* buf, u32 size);
400 bool tryWrite(u32* write_size,
const u8* buf, u32 size);
417static_assert(
sizeof(
FileHandle) == 0x3C,
"sead::FileHandle size mismatch");
431 if (device !=
nullptr)
454static_assert(
sizeof(
DirectoryEntry) == 0x110,
"sead::DirectoryEntry size mismatch");
Definition seadFileDevice.h:421
DirectoryHandle()
Definition seadFileDevice.h:423
u32 read(DirectoryEntry *entry, u32 num)
bool tryRead(u32 *read_num, DirectoryEntry *entry, u32 num)
~DirectoryHandle() override
Definition seadFileDevice.h:428
Definition seadFileDeviceMgr.h:18
Definition seadFileDevice.h:56
virtual void traceDirectoryPath(const SafeString &path) const
Definition seadFileDevice.h:322
SeekOrigin
Definition seadFileDevice.h:69
@ cSeekOrigin_Current
Definition seadFileDevice.h:71
@ cSeekOrigin_End
Definition seadFileDevice.h:72
@ cSeekOrigin_Begin
Definition seadFileDevice.h:70
bool tryWrite(u32 *write_size, FileHandle *handle, const u8 *buf, u32 size)
Definition seadFileDevice.cpp:264
virtual bool doWrite_(u32 *write_size, FileHandle *handle, const u8 *buf, u32 size)=0
const SafeString & getDriveName() const
Definition seadFileDevice.h:136
u32 readDirectory(DirectoryHandle *handle, DirectoryEntry *entry, u32 num)
Definition seadFileDevice.h:287
virtual FileDevice * doOpenDirectory_(DirectoryHandle *handle, const SafeString &dirname)=0
virtual void doResolvePath_(BufferedSafeString *out, const SafeString &path) const
Definition seadFileDevice.cpp:114
bool mPermission
Definition seadFileDevice.h:367
u32 getCurrentSeekPos(FileHandle *handle)
Definition seadFileDevice.h:220
bool tryGetCurrentSeekPos(u32 *pos, FileHandle *handle)
Definition seadFileDevice.cpp:322
bool isExistFile(const SafeString &path)
Definition seadFileDevice.h:249
bool tryReadDirectory(u32 *read_num, DirectoryHandle *handle, DirectoryEntry *entry, u32 num)
Definition seadFileDevice.cpp:489
~FileDevice() override
Definition seadFileDevice.cpp:29
FileDevice * tryOpen(FileHandle *handle, const SafeString &filename, FileOpenFlag flag, u32 div_size)
Definition seadFileDevice.cpp:142
bool trySeek(FileHandle *handle, s32 offset, SeekOrigin origin)
Definition seadFileDevice.cpp:296
bool tryGetFileSize(u32 *size, FileHandle *handle)
Definition seadFileDevice.cpp:372
bool tryMakeDirectoryWithParent(const SafeString &path, u32 permission)
bool tryClose(FileHandle *handle)
Definition seadFileDevice.cpp:168
u32 read(FileHandle *handle, u8 *buf, u32 size)
Definition seadFileDevice.h:191
FileDevice * open(FileHandle *handle, const SafeString &filename, FileOpenFlag flag, u32 div_size)
Definition seadFileDevice.h:173
u32 getFileSize(FileHandle *handle)
Definition seadFileDevice.h:238
bool tryIsExistDirectory(bool *is_exist, const SafeString &path)
Definition seadFileDevice.cpp:416
FileDevice(const SafeString &default_drive_name)
Definition seadFileDevice.h:125
virtual bool doIsExistFile_(bool *is_exist, const SafeString &path)=0
virtual u8 * doLoad_(LoadArg &arg)
Definition seadFileDevice.cpp:43
bool tryGetFileSize(u32 *size, const SafeString &path)
Definition seadFileDevice.cpp:353
virtual bool doGetFileSize_(u32 *size, const SafeString &path)=0
virtual bool doGetFileSize_(u32 *size, FileHandle *handle)=0
void setPermission(bool permission)
Definition seadFileDevice.h:146
virtual bool doClose_(FileHandle *handle)=0
void setFileHandleDivSize_(FileHandle *handle, u32 div_size) const
Definition seadFileDevice.cpp:545
bool isExistDirectory(const SafeString &path)
Definition seadFileDevice.h:259
virtual bool doIsAvailable_() const =0
virtual bool doSeek_(FileHandle *handle, s32 offset, SeekOrigin origin)=0
virtual bool doRead_(u32 *read_size, FileHandle *handle, u8 *buf, u32 size)=0
virtual bool doIsExistDirectory_(bool *is_exist, const SafeString &path)=0
bool makeDirectoryWithParent(const SafeString &path, u32 permission)
Definition seadFileDevice.h:306
static const s32 cDriveNameBufferSize
Definition seadFileDevice.h:75
HandleBuffer & getHandleBaseHandleBuffer_(HandleBase *handle) const
Definition seadFileDevice.cpp:569
virtual bool doGetCurrentSeekPos_(u32 *pos, FileHandle *handle)=0
bool seek(FileHandle *handle, s32 offset, SeekOrigin origin)
Definition seadFileDevice.h:211
bool tryIsExistFile(bool *is_exist, const SafeString &path)
Definition seadFileDevice.cpp:397
void setHandleBaseOriginalFileDevice_(HandleBase *handle, FileDevice *device) const
Definition seadFileDevice.cpp:561
RawErrorCode getLastRawError() const
Definition seadFileDevice.cpp:539
bool makeDirectory(const SafeString &path, u32 permission)
Definition seadFileDevice.h:297
virtual void resolveFilePath(BufferedSafeString *out, const SafeString &path) const
Definition seadFileDevice.h:327
virtual bool doCloseDirectory_(DirectoryHandle *handle)=0
virtual bool isMatchDevice_(const HandleBase *handle) const
Definition seadFileDevice.cpp:36
bool isAvailable() const
Definition seadFileDevice.cpp:121
virtual bool doMakeDirectory_(const SafeString &path, u32 permission)=0
bool closeDirectory(DirectoryHandle *handle)
Definition seadFileDevice.h:278
virtual void resolveDirectoryPath(BufferedSafeString *out, const SafeString &path) const
Definition seadFileDevice.h:332
u32 getFileSize(const SafeString &path)
Definition seadFileDevice.h:230
bool tryRead(u32 *read_size, FileHandle *handle, u8 *buf, u32 size)
Definition seadFileDevice.cpp:198
u8 * tryLoad(LoadArg &arg)
Definition seadFileDevice.cpp:131
virtual FileDevice * doOpen_(FileHandle *handle, const SafeString &filename, FileOpenFlag flag)=0
virtual void traceFilePath(const SafeString &path) const
Definition seadFileDevice.h:317
virtual void doTracePath_(const SafeString &path) const
Definition seadFileDevice.cpp:105
FileDevice * openDirectory(DirectoryHandle *handle, const SafeString &dirname)
Definition seadFileDevice.h:269
bool hasPermission() const
Definition seadFileDevice.h:151
virtual RawErrorCode doGetLastRawError_() const =0
void setHandleBaseFileDevice_(HandleBase *handle, FileDevice *device) const
Definition seadFileDevice.cpp:553
bool tryCloseDirectory(DirectoryHandle *handle)
Definition seadFileDevice.cpp:459
u32 write(FileHandle *handle, const u8 *buf, u32 size)
Definition seadFileDevice.h:201
virtual bool doReadDirectory_(u32 *read_num, DirectoryHandle *handle, DirectoryEntry *entry, u32 num)=0
FixedSafeString< cDriveNameBufferSize > mDriveName
Definition seadFileDevice.h:366
bool tryMakeDirectory(const SafeString &path, u32 permission)
Definition seadFileDevice.cpp:527
void unload(u8 *data)
Definition seadFileDevice.h:167
FileOpenFlag
Definition seadFileDevice.h:61
@ cFileOpenFlag_ReadWrite
Definition seadFileDevice.h:64
@ cFileOpenFlag_Create
Definition seadFileDevice.h:65
@ cFileOpenFlag_WriteOnly
Definition seadFileDevice.h:63
@ cFileOpenFlag_ReadOnly
Definition seadFileDevice.h:62
bool close(FileHandle *handle)
Definition seadFileDevice.h:182
u8 * load(LoadArg &arg)
Definition seadFileDevice.h:158
FileDevice * tryOpenDirectory(DirectoryHandle *handle, const SafeString &dirname)
Definition seadFileDevice.cpp:435
void setDriveName(const SafeString &drive_name)
Definition seadFileDevice.h:141
Definition seadFileDevice.h:376
u32 write(const u8 *buf, u32 size)
Definition seadFileDevice.cpp:20
u32 mDivSize
Definition seadFileDevice.h:412
bool seek(s32 offset, FileDevice::SeekOrigin origin)
bool trySeek(s32 offset, FileDevice::SeekOrigin origin)
bool tryWrite(u32 *write_size, const u8 *buf, u32 size)
~FileHandle() override
Definition seadFileDevice.h:384
u32 getDivSize() const
Definition seadFileDevice.h:391
bool tryGetCurrentSeekPos(u32 *pos)
bool tryRead(u32 *read_size, u8 *buf, u32 size)
bool tryGetFileSize(u32 *size)
FileHandle()
Definition seadFileDevice.h:378
u32 read(u8 *buf, u32 size)
Definition seadFileDevice.cpp:11
Definition seadSafeString.h:421
Definition seadFileDevice.h:20
const HandleBase & operator=(const HandleBase &)
HandleBase(const HandleBase &)
HandleBase()
Definition seadFileDevice.h:22
bool isOpen() const
Definition seadFileDevice.h:38
FileDevice * mDevice
Definition seadFileDevice.h:41
FileDevice * getDevice() const
Definition seadFileDevice.h:36
FileDevice * getOriginalDevice() const
Definition seadFileDevice.h:37
~HandleBase() override
Definition seadFileDevice.h:34
HandleBuffer mHandleBuffer
Definition seadFileDevice.h:43
FileDevice * mOriginalDevice
Definition seadFileDevice.h:42
friend IDisposer::IDisposer()
Definition seadDisposer.h:12
Definition seadAssert.h:44
s32 RawErrorCode
Definition seadFileDevice.h:14
SafeStringBase< char > SafeString
Definition seadSafeString.h:409
BufferedSafeStringBase< char > BufferedSafeString
Definition seadSafeString.h:411
SafeArray< u8, 32 > HandleBuffer
Definition seadFileDevice.h:15
#define SEAD_ASSERT(condition)
Definition seadAssert.h:24
#define SEAD_ASSERT_MSG(condition, format,...)
Definition seadAssert.h:33
#define SEAD_RTTI_BASE(CLASS)
Definition seadRuntimeTypeInfo.h:75
Definition seadFileDevice.h:443
FixedSafeString< 256 > name
Definition seadFileDevice.h:450
bool is_directory
Definition seadFileDevice.h:451
DirectoryEntry()
Definition seadFileDevice.h:444
Definition seadFileDevice.h:83
SafeString path
Definition seadFileDevice.h:110
bool need_unload
Definition seadFileDevice.h:118
s32 alignment
Definition seadFileDevice.h:114
u8 * buffer
Definition seadFileDevice.h:111
LoadArg(const LoadArg &arg)
Definition seadFileDevice.h:97
LoadArg()
Definition seadFileDevice.h:84
u32 roundup_size
Definition seadFileDevice.h:117
u32 read_size
Definition seadFileDevice.h:116
Heap * heap
Definition seadFileDevice.h:113
u32 buffer_size
Definition seadFileDevice.h:112
u32 div_size
Definition seadFileDevice.h:115