diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-12-29 09:57:48 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-12-29 09:57:48 +0100 |
| commit | 8b7216aaf2dacad7ce67d734d07b047fed8ec01e (patch) | |
| tree | 7af56dd646a4d12a25024da7ad5e6406ff98f124 /dev/Kernel/src | |
| parent | 5b1bb6cc086047e99a1d246fd2d337bf76887bd8 (diff) | |
IMPL: NeFS: Add file lock feature and validation for it.
- It is added to hide files from indexing.
- And will be used to hide system files.
IMPL: Swap: Add SwapDiskDelegate class, will also work on a swap packet
structure.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/Kernel/src')
| -rw-r--r-- | dev/Kernel/src/FS/NeFS.cc | 23 | ||||
| -rw-r--r-- | dev/Kernel/src/Mgr/SwapMgr.cc | 28 | ||||
| -rw-r--r-- | dev/Kernel/src/System/SwapDiskDelegate.cc | 57 |
3 files changed, 75 insertions, 33 deletions
diff --git a/dev/Kernel/src/FS/NeFS.cc b/dev/Kernel/src/FS/NeFS.cc index 27a027cd..bf39f7e6 100644 --- a/dev/Kernel/src/FS/NeFS.cc +++ b/dev/Kernel/src/FS/NeFS.cc @@ -720,7 +720,8 @@ bool NeFileSystemParser::WriteCatalog(_Input _Output NFS_CATALOG_STRUCT* catalog /// @param catalog_name the catalog name. /// @return the newly found catalog. _Output NFS_CATALOG_STRUCT* NeFileSystemParser::FindCatalog(_Input const Char* catalog_name, - Lba& out_lba) + Lba& out_lba, + Bool search_hidden) { if (!catalog_name || *catalog_name == 0) @@ -798,7 +799,7 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::FindCatalog(_Input const Char* c } } - kcout << "Fetching catalog...\r"; + kcout << "Finding catalog...\r"; NeFSSearchThroughCatalogList: while (drive.fPacket.fPacketGood) @@ -813,6 +814,14 @@ NeFSSearchThroughCatalogList: if (StringBuilder::Equals(catalog_name, catalog->Name)) { + /// ignore it, it's locked. + if (catalog->Status == kNeFSStatusLocked && + !search_hidden) + { + err_local_get() = kErrorFileLocked; + goto NeFSContinueSearch; + } + /// ignore unallocated catalog, break if (!(catalog->Flags & kNeFSFlagCreated)) { @@ -822,8 +831,8 @@ NeFSSearchThroughCatalogList: NFS_CATALOG_STRUCT* catalogPtr = new NFS_CATALOG_STRUCT(); rt_copy_memory(catalog, catalogPtr, sizeof(NFS_CATALOG_STRUCT)); - kcout << "Found catalog at: " << hex_number(start_catalog_lba) << endl; - kcout << "Found catalog at: " << catalog->Name << endl; + kcout << "Found available catalog at: " << hex_number(start_catalog_lba) << endl; + kcout << "Found available catalog at: " << catalog->Name << endl; out_lba = start_catalog_lba; return catalogPtr; @@ -844,6 +853,8 @@ NeFSSearchThroughCatalogList: goto NeFSSearchThroughCatalogList; } + err_local_get() = kErrorFileNotFound; + out_lba = 0UL; return nullptr; } @@ -854,7 +865,7 @@ NeFSSearchThroughCatalogList: _Output NFS_CATALOG_STRUCT* NeFileSystemParser::GetCatalog(_Input const Char* name) { Lba unused = 0; - return this->FindCatalog(name, unused); + return this->FindCatalog(name, unused, true); } /// @brief Closes a catalog, (frees it). @@ -923,6 +934,8 @@ Boolean NeFileSystemParser::RemoveCatalog(_Input const Char* catalog_name) } delete catalog; + catalog = nullptr; + return false; } diff --git a/dev/Kernel/src/Mgr/SwapMgr.cc b/dev/Kernel/src/Mgr/SwapMgr.cc deleted file mode 100644 index a909846f..00000000 --- a/dev/Kernel/src/Mgr/SwapMgr.cc +++ /dev/null @@ -1,28 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Corp, all rights reserved. - -------------------------------------------- */ - -#include <SystemKit/SwapMgr.h> -#include <KernelKit/FileMgr.h> - -namespace Kernel -{ - class SwapMgrDiskMgr; - - class SwapMgrDiskMgr final - { - static BOOL DumpToDisk(const Char* fork_name, const SizeT fork_name_len, VoidPtr data, const SizeT data_len) - { - if (!fork_name || !fork_name_len) - return NO; - - FileStream file(kSwapMgrPageFile, "wb"); - - file.Write(fork_name, data, data_len); - - return YES; - } - } -} // namespace Kernel
\ No newline at end of file diff --git a/dev/Kernel/src/System/SwapDiskDelegate.cc b/dev/Kernel/src/System/SwapDiskDelegate.cc new file mode 100644 index 00000000..ffe8812d --- /dev/null +++ b/dev/Kernel/src/System/SwapDiskDelegate.cc @@ -0,0 +1,57 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Corp, all rights reserved. + +------------------------------------------- */ + +#include <SystemKit/Swap.h> +#include <KernelKit/FileMgr.h> + +namespace Kernel::Detail +{ + class SwapDiskDelegate; + + class SwapDiskDelegate final + { + public: + explicit SwapDiskDelegate() = default; + ~SwapDiskDelegate() = default; + + ZKA_COPY_DEFAULT(SwapDiskDelegate); + + BOOL Write(const Char* fork_name, const SizeT fork_name_len, VoidPtr data, const SizeT data_len) + { + if (!fork_name || !fork_name_len) + return NO; + + if (data_len > mib_cast(16)) + return NO; + + if (!data) + return NO; + + FileStream file(kSwapMgrPageFile, "wb"); + + if (file.Write(fork_name, data, data_len).Error()) + { + return NO; + } + + return YES; + } + + VoidPtr Read(const Char* fork_name, const SizeT fork_name_len, const SizeT data_len) + { + if (!fork_name || !fork_name_len) + return nullptr; + + if (data_len > mib_cast(16)) + return nullptr; + + FileStream file(kSwapMgrPageFile, "rb"); + + voidPtr blob = file.Read(fork_name, data_len); + return blob; + } + }; +} // namespace Kernel::Detail
\ No newline at end of file |
