summaryrefslogtreecommitdiffhomepage
path: root/dev/Kernel/src
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-12-29 09:57:48 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-12-29 09:57:48 +0100
commit8b7216aaf2dacad7ce67d734d07b047fed8ec01e (patch)
tree7af56dd646a4d12a25024da7ad5e6406ff98f124 /dev/Kernel/src
parent5b1bb6cc086047e99a1d246fd2d337bf76887bd8 (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.cc23
-rw-r--r--dev/Kernel/src/Mgr/SwapMgr.cc28
-rw-r--r--dev/Kernel/src/System/SwapDiskDelegate.cc57
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