summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/src
diff options
context:
space:
mode:
authorAmlal <amlal@nekernel.org>2025-05-07 11:14:25 +0200
committerAmlal <amlal@nekernel.org>2025-05-07 11:14:25 +0200
commit8acaf9b721973fdd852abc01fc44ba1152b8f72a (patch)
treed3626413ddc890445d431451439a9abe225f4e5f /dev/kernel/src
parenta3ee1df87feddec339c710068e0922a40c6fd494 (diff)
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 <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/src')
-rw-r--r--dev/kernel/src/FS/HeFS+FileSystemParser.cc15
1 files changed, 12 insertions, 3 deletions
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;
}