summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal <amlal@nekernel.org>2025-05-05 02:46:33 +0200
committerAmlal <amlal@nekernel.org>2025-05-05 02:46:33 +0200
commit7b8460f92cbf53342fc35f1956f91c3ca190147e (patch)
treee68e6e77ecbfa157cd24646a08c0cbbc1a69bf73 /dev
parent74230b2cbf7f922c79d8106e021584488011a381 (diff)
kernel(feat): fix compilation error casued by the previous commit being too 'clever'
Signed-off-by: Amlal <amlal@nekernel.org>
Diffstat (limited to 'dev')
-rw-r--r--dev/ddk/DDKKit/ifs.h1
-rw-r--r--dev/kernel/FirmwareKit/EFI/API.h3
-rw-r--r--dev/kernel/src/FS/HeFS+FileSystemParser.cc40
3 files changed, 39 insertions, 5 deletions
diff --git a/dev/ddk/DDKKit/ifs.h b/dev/ddk/DDKKit/ifs.h
index 8232499a..46c13be4 100644
--- a/dev/ddk/DDKKit/ifs.h
+++ b/dev/ddk/DDKKit/ifs.h
@@ -15,4 +15,3 @@ struct DDK_IFS_MANIFEST;
/// @brief IFS hooks to plug into the FileMgr.
/// why? because we don't need to implement filesystem on the kernel directly.
-
diff --git a/dev/kernel/FirmwareKit/EFI/API.h b/dev/kernel/FirmwareKit/EFI/API.h
index 50964bb8..7c9ad93d 100644
--- a/dev/kernel/FirmwareKit/EFI/API.h
+++ b/dev/kernel/FirmwareKit/EFI/API.h
@@ -25,6 +25,9 @@ class BootTextWriter;
inline EfiSystemTable* ST = nullptr;
inline EfiBootServices* BS = nullptr;
+EXTERN_C void rt_cli();
+EXTERN_C void rt_halt();
+
namespace Boot {
/// @brief Halt and clear interrut flag on x86.
/// @return
diff --git a/dev/kernel/src/FS/HeFS+FileSystemParser.cc b/dev/kernel/src/FS/HeFS+FileSystemParser.cc
index 1e2cf873..1b674344 100644
--- a/dev/kernel/src/FS/HeFS+FileSystemParser.cc
+++ b/dev/kernel/src/FS/HeFS+FileSystemParser.cc
@@ -210,7 +210,7 @@ namespace Detail {
mnt->fPacket.fPacketLba = cousin->fChild;
mnt->fPacket.fPacketSize = sizeof(HEFS_INDEX_NODE_DIRECTORY);
- mnt->fPacket.fPacketContent = cousin;
+ mnt->fPacket.fPacketContent = cousin_child;
mnt->fInput(mnt->fPacket);
@@ -236,13 +236,26 @@ namespace Detail {
mnt->fOutput(mnt->fPacket);
+
+ mnt->fPacket.fPacketLba = left ? grand_parent->fPrev : grand_parent->fNext;
+ mnt->fPacket.fPacketSize = sizeof(HEFS_INDEX_NODE_DIRECTORY);
+ mnt->fPacket.fPacketContent = cousin;
+
+ mnt->fOutput(mnt->fPacket);
+
+ mnt->fPacket.fPacketLba = cousin->fChild;
+ mnt->fPacket.fPacketSize = sizeof(HEFS_INDEX_NODE_DIRECTORY);
+ mnt->fPacket.fPacketContent = cousin_child;
+
+ mnt->fOutput(mnt->fPacket);
+
mnt->fPacket.fPacketLba = start;
mnt->fPacket.fPacketSize = sizeof(HEFS_INDEX_NODE_DIRECTORY);
mnt->fPacket.fPacketContent = parent;
mnt->fOutput(mnt->fPacket);
- kout << "Rotate tree has been done.\r";
+ kout << "RB-Tree has been rotated.\r";
}
/// @brief Get the index node size.
@@ -624,6 +637,8 @@ namespace Detail {
mnt->fInput(mnt->fPacket);
+ kout8 << dir_name << u8"\r";
+
(Void)(kout << hex_number(hefsi_hash_64(dir_name)) << kendl);
(Void)(kout << hex_number(dir->fHashPath) << kendl);
@@ -1073,11 +1088,21 @@ _Output Bool HeFileSystemParser::INodeCtl_(_Input DriveTrait* drive, _Input cons
const BOOL delete_or_create) {
HEFS_INDEX_NODE* node = (HEFS_INDEX_NODE*) mm_new_heap(sizeof(HEFS_INDEX_NODE), Yes, No);
+ if (!node) {
+ err_global_get() = kErrorInvalidData;
+ return NO;
+ }
+
rt_set_memory(node, 0, sizeof(HEFS_INDEX_NODE));
HEFS_BOOT_NODE* root = (HEFS_BOOT_NODE*) RTL_ALLOCA(sizeof(HEFS_BOOT_NODE));
- MUST_PASS(root && node);
+ if (!root) {
+ mm_delete_heap((VoidPtr) node);
+ err_global_get() = kErrorInvalidData;
+
+ return NO;
+ }
rt_copy_memory((VoidPtr) "fs/hefs-packet", drive->fPacket.fPacketMime,
rt_string_len("fs/hefs-packet"));
@@ -1088,13 +1113,20 @@ _Output Bool HeFileSystemParser::INodeCtl_(_Input DriveTrait* drive, _Input cons
drive->fInput(drive->fPacket);
- if (KStringBuilder::Equals(name, kHeFSSearchAllStr)) {
+ if (KStringBuilder::Equals(dir, kHeFSSearchAllStr)) {
kout << "Error: Invalid file name.\r";
err_global_get() = kErrorInvalidData;
return NO;
}
+ for (SizeT i_name = 0UL; i_name < urt_string_len(name); ++i_name) {
+ if (name[i_name] == u'/') {
+ err_global_get() = kErrorInvalidData;
+ return NO;
+ }
+ }
+
if (KStringBuilder::Equals(dir, kHeFSSearchAllStr)) {
kout << "Error: Invalid directory name.\r";