diff options
| author | Amlal <amlal@nekernel.org> | 2025-05-05 02:46:33 +0200 |
|---|---|---|
| committer | Amlal <amlal@nekernel.org> | 2025-05-05 02:46:33 +0200 |
| commit | 7b8460f92cbf53342fc35f1956f91c3ca190147e (patch) | |
| tree | e68e6e77ecbfa157cd24646a08c0cbbc1a69bf73 /dev | |
| parent | 74230b2cbf7f922c79d8106e021584488011a381 (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.h | 1 | ||||
| -rw-r--r-- | dev/kernel/FirmwareKit/EFI/API.h | 3 | ||||
| -rw-r--r-- | dev/kernel/src/FS/HeFS+FileSystemParser.cc | 40 |
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"; |
