From 8acaf9b721973fdd852abc01fc44ba1152b8f72a Mon Sep 17 00:00:00 2001 From: Amlal Date: Wed, 7 May 2025 11:14:25 +0200 Subject: feat(kernel): HeFS fixes, AHCI improvements, and MBCI tweaks. why? - Some parts were causing issues on the filesystem. - The slot probe code was naive. - Made the current MBCI implementation clearer. Signed-off-by: Amlal --- dev/kernel/src/FS/HeFS+FileSystemParser.cc | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'dev/kernel/src/FS/HeFS+FileSystemParser.cc') diff --git a/dev/kernel/src/FS/HeFS+FileSystemParser.cc b/dev/kernel/src/FS/HeFS+FileSystemParser.cc index 465cfc32..1cd7e61a 100644 --- a/dev/kernel/src/FS/HeFS+FileSystemParser.cc +++ b/dev/kernel/src/FS/HeFS+FileSystemParser.cc @@ -514,10 +514,14 @@ namespace Detail { if (start > root->fEndIND) break; } - node_arr[start_cnt + 1].fDeleted = 1UL; err_global_get() = kErrorSuccess; delete dir; + if (start_cnt == 0) { + delete[] node_arr; + node_arr = nullptr; + } + return node_arr; } @@ -577,7 +581,7 @@ namespace Detail { node->fOffsetSlices = root->fStartBlock; - auto offset = 0; + auto offset = kHeFSBlockLen; SizeT cnt = 0ULL; @@ -1031,6 +1035,10 @@ _Output Bool HeFileSystemParser::INodeManip(_Input DriveTrait* mnt, VoidPtr bloc mnt->fPacket.fPacketSize = kHeFSBlockLen; mnt->fPacket.fPacketContent = block; + if (mnt->fPacket.fPacketLba > root->fEndBlock) { + goto inode_manip_fail; + } + in ? mnt->fInput(mnt->fPacket) : mnt->fOutput(mnt->fPacket); sz_out += kHeFSBlockLen; @@ -1049,6 +1057,7 @@ _Output Bool HeFileSystemParser::INodeManip(_Input DriveTrait* mnt, VoidPtr bloc } } +inode_manip_fail: delete[] nodes; return NO; } @@ -1174,7 +1183,7 @@ Boolean fs_init_hefs(Void) { Utf8Char contents_1[kHeFSBlockLen] = u8"ロケットにはジエットエンジン\r"; MUST_PASS(parser.INodeManip(&kMountPoint, contents_1, kHeFSBlockLen, u8"/boot", - kHeFSFileKindRegular, u8"ジェット警察.txt", NO)); + kHeFSFileKindRegular, u8"ジェット警察.txt", YES)); return YES; } -- cgit v1.2.3