From 81183c95e955a416a5b401b05a903945687b1fad Mon Sep 17 00:00:00 2001 From: Amlal Date: Sun, 22 Dec 2024 09:59:02 +0100 Subject: #3 : NeFilesystemInstaller WiP Issue on it. --- dev/Kernel/src/FS/NeFS.cc | 20 ++++++------- dev/Kernel/src/KernelMain.cc | 54 ++++++++++++++++++++++------------ dev/Kernel/src/NeFS+FileMgr.cc | 34 ++++++++++----------- dev/Kernel/src/UserProcessScheduler.cc | 2 +- 4 files changed, 62 insertions(+), 48 deletions(-) (limited to 'dev/Kernel/src') diff --git a/dev/Kernel/src/FS/NeFS.cc b/dev/Kernel/src/FS/NeFS.cc index fe6fbe0c..1dd08e4f 100644 --- a/dev/Kernel/src/FS/NeFS.cc +++ b/dev/Kernel/src/FS/NeFS.cc @@ -742,14 +742,14 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::FindCatalog(_Input const Char* c NFS_ROOT_PARTITION_BLOCK* part = (NFS_ROOT_PARTITION_BLOCK*)&fs_buf; - auto startCatalogList = part->StartCatalog; - const auto cCtartCatalogList = startCatalogList; + auto start_catalog_lba = part->StartCatalog; + const auto kStartCatalogList = start_catalog_lba; auto localSearchFirst = false; NFS_CATALOG_STRUCT temporary_catalog{0}; - drive.fPacket.fPacketLba = startCatalogList; + drive.fPacket.fPacketLba = start_catalog_lba; drive.fPacket.fPacketContent = &temporary_catalog; drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT); @@ -783,7 +783,7 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::FindCatalog(_Input const Char* c if (parentCatalog && !StringBuilder::Equals(parentName, NeFileSystemHelper::Root())) { - startCatalogList = parentCatalog->NextSibling; + start_catalog_lba = parentCatalog->NextSibling; delete parentCatalog; localSearchFirst = true; @@ -803,7 +803,7 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::FindCatalog(_Input const Char* c NeFSSearchThroughCatalogList: while (drive.fPacket.fPacketGood) { - drive.fPacket.fPacketLba = startCatalogList; + drive.fPacket.fPacketLba = start_catalog_lba; drive.fPacket.fPacketContent = &temporary_catalog; drive.fPacket.fPacketSize = sizeof(NFS_CATALOG_STRUCT); @@ -822,24 +822,24 @@ NeFSSearchThroughCatalogList: NFS_CATALOG_STRUCT* catalogPtr = new NFS_CATALOG_STRUCT(); rt_copy_memory(catalog, catalogPtr, sizeof(NFS_CATALOG_STRUCT)); - kcout << "Found catalog at: " << hex_number(startCatalogList) << endl; + kcout << "Found catalog at: " << hex_number(start_catalog_lba) << endl; kcout << "Found catalog at: " << catalog->Name << endl; - out_lba = startCatalogList; + out_lba = start_catalog_lba; return catalogPtr; } NeFSContinueSearch: - startCatalogList = catalog->NextSibling; + start_catalog_lba = catalog->NextSibling; - if (startCatalogList <= kNeFSRootCatalogStartAddress) + if (start_catalog_lba <= kNeFSRootCatalogStartAddress) break; } if (localSearchFirst) { localSearchFirst = false; - startCatalogList = cCtartCatalogList; + start_catalog_lba = kStartCatalogList; goto NeFSSearchThroughCatalogList; } diff --git a/dev/Kernel/src/KernelMain.cc b/dev/Kernel/src/KernelMain.cc index 6907deea..8895814d 100644 --- a/dev/Kernel/src/KernelMain.cc +++ b/dev/Kernel/src/KernelMain.cc @@ -25,32 +25,37 @@ #include #include +#define kKeCachedName "/System/CacheKernel" + STATIC CG::ML_WINDOW_STRUCT* kKernelWnd = nullptr; namespace Kernel::Detail { /// @brief Filesystem auto formatter, additional checks are also done by the class. - class FilesystemInstaller final + class NeFilesystemInstaller final { - Kernel::NeFileSystemMgr* fNeFS{nullptr}; + Kernel::NeFileSystemMgr* mNeFS{nullptr}; + Kernel::NeFileSystemJournal mJournal; public: /// @brief wizard constructor. - FilesystemInstaller() + explicit NeFilesystemInstaller() { - fNeFS = (Kernel::NeFileSystemMgr*)Kernel::IFilesystemMgr::GetMounted(); + mNeFS = new Kernel::NeFileSystemMgr(); - if (fNeFS && fNeFS->GetParser()) + if (mNeFS) { + mJournal.CreateJournal(mNeFS->GetParser()); + constexpr auto kFolderInfo = "META-XML"; - const auto kFolderCount = 7; - const char* kFolderStr[kFolderCount] = { + const SizeT kFolderCount = 7; + const Char* kFolderStr[kFolderCount] = { "/Boot/", "/System/", "/Support/", "/Applications/", "/Users/", "/Library/", "/Mount/"}; for (Kernel::SizeT dir_index = 0UL; dir_index < kFolderCount; ++dir_index) { - auto catalog_folder = fNeFS->GetParser()->GetCatalog(kFolderStr[dir_index]); + auto catalog_folder = mNeFS->GetParser()->GetCatalog(kFolderStr[dir_index]); if (catalog_folder) { @@ -60,7 +65,7 @@ namespace Kernel::Detail continue; } - catalog_folder = fNeFS->GetParser()->CreateCatalog(kFolderStr[dir_index], 0, + catalog_folder = mNeFS->GetParser()->CreateCatalog(kFolderStr[dir_index], 0, kNeFSCatalogKindDir); NFS_FORK_STRUCT fork_folder{0}; @@ -87,11 +92,16 @@ namespace Kernel::Detail folder_metadata += kFolderStr[dir_index]; folder_metadata += "

\r"; + Kernel::KString folder_name(2048); + folder_name += catalog_folder->Name; + + mJournal.Commit(mNeFS->GetParser(), folder_metadata,folder_name); + const Kernel::SizeT kMetaDataSz = kNeFSSectorSz; - fNeFS->GetParser()->CreateFork(catalog_folder, fork_folder); + mNeFS->GetParser()->CreateFork(catalog_folder, fork_folder); - fNeFS->GetParser()->WriteCatalog( + mNeFS->GetParser()->WriteCatalog( catalog_folder, true, (Kernel::VoidPtr)(folder_metadata.CData()), kMetaDataSz, kFolderInfo); @@ -99,17 +109,26 @@ namespace Kernel::Detail catalog_folder = nullptr; } } + + while (1); } - ~FilesystemInstaller() = default; + ~NeFilesystemInstaller() + { + if (mNeFS) + delete mNeFS; + + mNeFS = nullptr; + } - ZKA_COPY_DEFAULT(FilesystemInstaller); + ZKA_COPY_DEFAULT(NeFilesystemInstaller); /// @brief Grab the disk's NewFS reference. /// @return NeFileSystemMgr the filesystem interface - Kernel::NeFileSystemMgr* Leak() + Kernel::NeFileSystemMgr* Leak() noexcept { - return fNeFS; + MUST_PASS(mNeFS); + return mNeFS; } }; } // namespace Kernel::Detail @@ -119,8 +138,7 @@ namespace Kernel::Detail /// @return Void EXTERN_C Kernel::Void rtl_kernel_main(Kernel::SizeT argc, char** argv, char** envp, Kernel::SizeT envp_len) { - Kernel::IFilesystemMgr::Mount(new Kernel::NeFileSystemMgr()); - Kernel::Detail::FilesystemInstaller installer; - + Kernel::Detail::fs_init_newfs(); + Kernel::Detail::NeFilesystemInstaller installer{}; } diff --git a/dev/Kernel/src/NeFS+FileMgr.cc b/dev/Kernel/src/NeFS+FileMgr.cc index c57785dc..d47a900a 100644 --- a/dev/Kernel/src/NeFS+FileMgr.cc +++ b/dev/Kernel/src/NeFS+FileMgr.cc @@ -18,22 +18,18 @@ namespace Kernel /// @brief C++ constructor NeFileSystemMgr::NeFileSystemMgr() { - MUST_PASS(Detail::fs_init_newfs()); - - NeFileSystemParser* fImpl; - mm_new_class(&fImpl); - MUST_PASS(fImpl); + NeFileSystemParser* mParser = new NeFileSystemParser(); + MUST_PASS(mParser); kcout << "We are done allocating NeFileSystemParser...\r"; } NeFileSystemMgr::~NeFileSystemMgr() { - if (fImpl) + if (mParser) { kcout << "Destroying NeFileSystemParser...\r"; - - mm_delete_class(&fImpl); + mm_delete_class(&mParser); } } @@ -45,7 +41,7 @@ namespace Kernel if (path == nullptr || *path == 0) return false; - return fImpl->RemoveCatalog(path); + return mParser->RemoveCatalog(path); } /// @brief Creates a node with the specified. @@ -53,7 +49,7 @@ namespace Kernel /// @return The Node pointer. NodePtr NeFileSystemMgr::Create(_Input const Char* path) { - return node_cast(fImpl->CreateCatalog(path)); + return node_cast(mParser->CreateCatalog(path)); } /// @brief Creates a node with is a directory. @@ -61,7 +57,7 @@ namespace Kernel /// @return The Node pointer. NodePtr NeFileSystemMgr::CreateDirectory(const Char* path) { - return node_cast(fImpl->CreateCatalog(path, 0, kNeFSCatalogKindDir)); + return node_cast(mParser->CreateCatalog(path, 0, kNeFSCatalogKindDir)); } /// @brief Creates a node with is a alias. @@ -69,7 +65,7 @@ namespace Kernel /// @return The Node pointer. NodePtr NeFileSystemMgr::CreateAlias(const Char* path) { - return node_cast(fImpl->CreateCatalog(path, 0, kNeFSCatalogKindAlias)); + return node_cast(mParser->CreateCatalog(path, 0, kNeFSCatalogKindAlias)); } /// @brief Creates a node with is a page file. @@ -77,7 +73,7 @@ namespace Kernel /// @return The Node pointer. NodePtr NeFileSystemMgr::CreateSwapFile(const Char* path) { - return node_cast(fImpl->CreateCatalog(path, 0, kNeFSCatalogKindPage)); + return node_cast(mParser->CreateCatalog(path, 0, kNeFSCatalogKindPage)); } /// @brief Gets the root directory. @@ -120,7 +116,7 @@ namespace Kernel if (!r || *r == 0) return nullptr; - auto catalog = fImpl->GetCatalog(path); + auto catalog = mParser->GetCatalog(path); return node_cast(catalog); } @@ -173,7 +169,7 @@ namespace Kernel ZKA_UNUSED(flags); if ((reinterpret_cast(node))->Kind == kNeFSCatalogKindFile) - fImpl->WriteCatalog(reinterpret_cast(node), (flags & kFileFlagRsrc ? true : false), data, size, + mParser->WriteCatalog(reinterpret_cast(node), (flags & kFileFlagRsrc ? true : false), data, size, name); } @@ -191,7 +187,7 @@ namespace Kernel ZKA_UNUSED(flags); if ((reinterpret_cast(node))->Kind == kNeFSCatalogKindFile) - return fImpl->ReadCatalog(reinterpret_cast(node), (flags & kFileFlagRsrc ? true : false), sz, + return mParser->ReadCatalog(reinterpret_cast(node), (flags & kFileFlagRsrc ? true : false), sz, name); return nullptr; @@ -208,7 +204,7 @@ namespace Kernel if (!node || off == 0) return false; - return fImpl->Seek(reinterpret_cast(node), off); + return mParser->Seek(reinterpret_cast(node), off); } /// @brief Tell where the catalog is. @@ -221,7 +217,7 @@ namespace Kernel if (!node) return kNPos; - return fImpl->Tell(reinterpret_cast(node)); + return mParser->Tell(reinterpret_cast(node)); } /// @brief Rewinds the catalog. @@ -241,7 +237,7 @@ namespace Kernel /// @return the Filesystem parser class. _Output NeFileSystemParser* NeFileSystemMgr::GetParser() noexcept { - return fImpl; + return mParser; } } // namespace Kernel diff --git a/dev/Kernel/src/UserProcessScheduler.cc b/dev/Kernel/src/UserProcessScheduler.cc index 637eb151..d6e27bd6 100644 --- a/dev/Kernel/src/UserProcessScheduler.cc +++ b/dev/Kernel/src/UserProcessScheduler.cc @@ -9,7 +9,7 @@ /***********************************************************************************/ /// @file UserProcessScheduler.cc -/// @brief EL0/Ring-3 process scheduler. +/// @brief Low level/Ring-3 process scheduler. /***********************************************************************************/ #include -- cgit v1.2.3