47#define kRestrictRB "rb"
49#define kRestrictWR "rw"
50#define kRestrictWRB "rwb"
52#define kRestrictMax (5U)
54#define rtl_node_cast(PTR) reinterpret_cast<Kernel::NodePtr>(PTR)
56#define kFileMimeGeneric "ne-application-kind/all"
59#define kFileMgrNPos (~0UL)
134#ifdef __FSKIT_INCLUDES_NEFS__
141 explicit NeFileSystemMgr();
142 ~NeFileSystemMgr()
override;
150 NodePtr CreateDirectory(
const Char* path)
override;
154 bool Remove(
_Input const Char* path)
override;
180#ifdef __FSKIT_INCLUDES_EXT2__
187 explicit Ext2FileSystemMgr();
188 ~Ext2FileSystemMgr()
override;
196 NodePtr CreateDirectory(
const Char* path)
override;
200 bool Remove(
_Input const Char* path)
override;
218 Ext2FileSystemParser* GetParser();
221 Ext2FileSystemParser* mParser{
nullptr};
226#ifdef __FSKIT_INCLUDES_OPENHEFS__
233 explicit HeFileSystemMgr();
234 ~HeFileSystemMgr()
override;
242 NodePtr CreateDirectory(
const Char* path)
override;
246 bool Remove(
_Input const Char* path)
override;
264 HeFileSystemParser* GetParser();
267 HeFileSystemParser* mParser{
nullptr};
277template <
typename Encoding = Char,
typename FSClass = IFilesystemMgr>
280 explicit FileStream(
const Encoding* path,
const Encoding* restrict_type);
297 auto man = FSClass::GetMounted();
300 man->Write(offset,
fFile, data, len);
316 auto man = FSClass::GetMounted();
319 man->Write(name,
fFile, data, 0, len);
333 auto man = FSClass::GetMounted();
350 auto man = FSClass::GetMounted();
353 man->Seek(
fFile, offset);
401template <
typename Encoding,
typename Class>
403 :
fFile(Class::GetMounted()->Open(path, restrict_type)) {
426 for (
SizeT index = 0; index < kRestrictCount; ++index) {
427 if (
rt_string_cmp(restrict_type, kRestrictList[index].fRestrict,
434 kout <<
"FileMgr: Open file at: " << path <<
".\r";
438template <
typename Encoding,
typename Class>
#define _Output
Definition CompilerHint.h:15
#define _Input
Definition CompilerHint.h:14
#define kout
Definition DebugOutput.h:189
#define NE_COPY_DEFAULT(KLASS)
Definition Detail.h:17
#define kRestrictW
Definition FileMgr.h:48
#define kRestrictWR
Definition FileMgr.h:49
#define kFileMimeGeneric
Definition FileMgr.h:56
#define kRestrictMax
Definition FileMgr.h:52
#define kRestrictRB
Definition FileMgr.h:47
#define kRestrictR
Include filesystems that NeKernel supports.
Definition FileMgr.h:46
#define kRestrictWRB
Definition FileMgr.h:50
: Memory allocation support for the NeKernel.
ErrorOr class for error handling.
Definition ErrorOr.h:22
FileStream(const Encoding *path, const Encoding *restrict_type)
constructor
Definition FileMgr.h:402
ErrorOr< Int64 > Write(SizeT offset, const VoidPtr data, SizeT len)
Definition FileMgr.h:288
const Char * fMime
Definition FileMgr.h:383
VoidPtr Read(SizeT offset, SizeT sz)
Definition FileMgr.h:343
~FileStream()
destructor of the file stream.
Definition FileMgr.h:439
VoidPtr Read(const Char *name, SizeT sz)
Definition FileMgr.h:326
@ kFileMgrRestrictReadWrite
Definition FileMgr.h:376
@ kFileMgrRestrictWrite
Definition FileMgr.h:374
@ kFileMgrRestrictWriteBinary
Definition FileMgr.h:375
@ kFileMgrRestrictReadWriteBinary
Definition FileMgr.h:377
@ kFileMgrRestrictReadBinary
Definition FileMgr.h:373
@ kFileMgrRestrictRead
Definition FileMgr.h:372
FileStream & operator=(const FileStream &)
NodePtr fFile
Definition FileMgr.h:381
FileStream(const FileStream &)
ErrorOr< Int64 > Write(const Char *name, const VoidPtr data, SizeT len)
Definition FileMgr.h:307
NodePtr Leak()
Leak node pointer.
Definition FileMgr.h:365
Int32 fFileRestrict
Definition FileMgr.h:382
Char * MIME()
Leak MIME.
Definition FileMgr.h:369
Filesystem Mgr Interface class.
Definition FileMgr.h:80
virtual Void Write(_Input const Char *name, _Input NodePtr node, _Input VoidPtr data, _Input Int32 flags, _Input SizeT size)=0
virtual NodePtr CreateAlias(_Input const Char *path)=0
virtual NodePtr CreateDirectory(_Input const Char *path)=0
static IFilesystemMgr * Unmount()
Unmounts the active filesystem.
Definition FileMgr.cc:27
virtual NodePtr Open(_Input const Char *path, _Input const Char *r)=0
virtual ~IFilesystemMgr()=default
virtual bool Remove(_Input const Char *path)=0
virtual _Output VoidPtr Read(_Input const Char *name, _Input NodePtr node, _Input Int32 flags, _Input SizeT sz)=0
static bool Mount(IFilesystemMgr *interface)
Mounts a new filesystem into an active state.
Definition FileMgr.cc:41
virtual SizeT Tell(_Input NodePtr node)=0
virtual bool Seek(_Input NodePtr node, _Input SizeT off)=0
virtual NodePtr Create(_Input const Char *path)=0
virtual bool Rewind(_Input NodePtr node)=0
virtual Void Write(_Input NodePtr node, _Input VoidPtr data, _Input Int32 flags, _Input SizeT size)=0
static IFilesystemMgr * GetMounted()
Getter, gets the active filesystem.
Definition FileMgr.cc:21
virtual NodePtr CreateSwapFile(const Char *path)=0
virtual _Output VoidPtr Read(_Input NodePtr node, _Input Int32 flags, _Input SizeT sz)=0
UPS inline definitions.
Definition Device.h:12
char Char
Definition Config.h:51
void Void
Definition Config.h:87
Size rt_string_len(const Char *str)
Definition AsciiUtils.cc:23
constexpr KPCError kErrorSuccess
Definition KPC.h:32
FileStream< Char > FileStreamASCII
Definition FileMgr.h:386
FileStream< Utf8Char > FileStreamUTF8
Definition FileMgr.h:387
STATIC const auto kRestrictStrLen
Definition FileMgr.h:392
Int rt_string_cmp(const Char *src, const Char *cmp, Size len)
Definition AsciiUtils.cc:10
__SIZE_TYPE__ SizeT
Definition Config.h:60
Int32 mm_free_ptr(VoidPtr heap_ptr)
Declare pointer as free.
Definition HeapMgr.cc:187
@ kFileReadChunk
Definition FileMgr.h:66
@ kFileFlagData
Definition FileMgr.h:70
@ kFileIOCnt
Definition FileMgr.h:71
@ kFileWriteAll
Definition FileMgr.h:64
@ kFileReadAll
Definition FileMgr.h:65
@ kFileIOInvalid
Definition FileMgr.h:63
@ kFileWriteChunk
Definition FileMgr.h:67
@ kFileFlagRsrc
Definition FileMgr.h:69
void * VoidPtr
Definition Config.h:33
constexpr KPCError kErrorInvalidData
Definition KPC.h:56
__INT32_TYPE__ Int32
Definition Config.h:38
UInt64 CursorType
Definition FileMgr.h:390
FileStream< WideChar > FileStreamUTF16
Definition FileMgr.h:388
VoidPtr NodePtr
Definition FileMgr.h:74
__UINT64_TYPE__ UInt64
Definition Config.h:48
OpenHeFS filesystem support.
restrict information about the file descriptor.
Definition FileMgr.h:395
Char fRestrict[kRestrictStrLen]
Definition FileMgr.h:396
Int32 fMappedTo
Definition FileMgr.h:397