1#pragma once
2
3#include <nn/fs/fs_types.h>
4#include "filedevice/seadFileDevice.h"
5#include "prim/seadSafeString.h"
6
7namespace sead
8{
9class NinFileDeviceBase : public FileDevice
10{
11 SEAD_RTTI_OVERRIDE(NinFileDeviceBase, FileDevice)
12
13public:
14 NinFileDeviceBase(const SafeString& name, const SafeString& mount_point);
15
16protected:
17 struct FileHandleInner;
18 struct DirectoryHandleInner;
19
20 bool doIsAvailable_() const override;
21 FileDevice* doOpen_(FileHandle* handle, const SafeString& path, FileOpenFlag flag) override;
22 bool doClose_(FileHandle* handle) override;
23 bool doFlush_(FileHandle* handle) override;
24 bool doRemove_(const SafeString& path) override;
25 bool doRead_(u32* bytesRead, FileHandle* handle, u8* outBuffer, u32 bytesToRead) override;
26 bool doWrite_(u32* bytesWritten, FileHandle* handle, const u8* inBuffer,
27 u32 bytesToWrite) override;
28 bool doSeek_(FileHandle* handle, s32 offset, SeekOrigin origin) override;
29 bool doGetCurrentSeekPos_(u32* seekPos, FileHandle* handle) override;
30 bool doGetFileSize_(u32* fileSize, const SafeString& path) override;
31 bool doGetFileSize_(u32* fileSize, FileHandle* handle) override;
32 bool doIsExistFile_(bool* exists, const SafeString& path) override;
33 bool doIsExistDirectory_(bool* exists, const SafeString& path) override;
34 FileDevice* doOpenDirectory_(DirectoryHandle* handle, const SafeString& path) override;
35 bool doCloseDirectory_(DirectoryHandle* handle) override;
36 bool doReadDirectory_(u32* entriesRead, DirectoryHandle* handle, DirectoryEntry* entries,
37 u32 entriesToRead) override;
38 bool doMakeDirectory_(const SafeString& path, u32 u_32) override;
39 s32 doGetLastRawError_() const override;
40 void doResolvePath_(BufferedSafeString* out, const SafeString& path) const override;
41
42 virtual bool formatPathForFS_(BufferedSafeString* out, const SafeString& path) const;
43
44 FileHandleInner* getFileHandleInner_(HandleBase* handle, bool construct = false) const;
45 DirectoryHandleInner* getDirectoryHandleInner_(HandleBase* handle,
46 bool construct = false) const;
47
48 nn::Result mLastError = nn::ResultSuccess{};
49 SafeString mMountPoint;
50};
51} // namespace sead
52