From 902bafa5dc8c3ac5fcbf13a5af73e016e9c64685 Mon Sep 17 00:00:00 2001 From: Amlal Date: Thu, 8 May 2025 10:17:30 +0200 Subject: meta(kernel): saving changes to avoid loss. Signed-off-by: Amlal --- dev/kernel/src/FS/HeFS+FileSystemParser.cc | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 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 a324da2a..d66c4a53 100644 --- a/dev/kernel/src/FS/HeFS+FileSystemParser.cc +++ b/dev/kernel/src/FS/HeFS+FileSystemParser.cc @@ -422,6 +422,8 @@ namespace Detail { else --root->fINDCount; + root->fChecksum = ke_calculate_crc32((Char*) root, sizeof(HEFS_BOOT_NODE)); + mnt->fPacket.fPacketLba = mnt->fLbaStart; mnt->fPacket.fPacketSize = sizeof(HEFS_BOOT_NODE); mnt->fPacket.fPacketContent = root; @@ -584,9 +586,9 @@ namespace Detail { SizeT cnt = 0ULL; while (cnt < kHeFSSliceCount) { - HEFS_INODE_SLICE& slice = node->fSlices[cnt]; - slice.fBase = offset; - slice.fLength = kHeFSBlockLen; + HEFS_SLICE_NODE& slice = node->fSlices[cnt]; + slice.fBase = offset; + slice.fLength = kHeFSBlockLen; offset += kHeFSBlockLen; ++cnt; @@ -601,10 +603,14 @@ namespace Detail { root->fStartIN += sizeof(HEFS_INDEX_NODE); root->fStartBlock += (kHeFSSliceCount * kHeFSBlockLen); + root->fChecksum = ke_calculate_crc32((Char*) root, sizeof(HEFS_BOOT_NODE)); + mnt->fPacket.fPacketLba = mnt->fLbaStart; mnt->fPacket.fPacketSize = sizeof(HEFS_BOOT_NODE); mnt->fPacket.fPacketContent = root; + mnt->fOutput(mnt->fPacket); + mm_delete_heap(dir); return YES; @@ -626,6 +632,8 @@ namespace Detail { root->fStartIN -= sizeof(HEFS_INDEX_NODE); root->fStartBlock -= (kHeFSSliceCount * kHeFSBlockLen); + root->fChecksum = ke_calculate_crc32((Char*) root, sizeof(HEFS_BOOT_NODE)); + mnt->fPacket.fPacketLba = mnt->fLbaStart; mnt->fPacket.fPacketSize = sizeof(HEFS_BOOT_NODE); mnt->fPacket.fPacketContent = root; @@ -1004,11 +1012,9 @@ _Output Bool HeFileSystemParser::INodeManip(_Input DriveTrait* mnt, VoidPtr bloc if (!KStringBuilder::Equals(root->fMagic, kHeFSMagic) || root->fVersion != kHeFSVersion) { err_global_get() = kErrorDisk; - return YES; + return NO; } - if (root->fStartBlock > root->fEndBlock) return NO; - SizeT cnt = block_sz / sizeof(HEFS_INDEX_NODE); auto nodes = Detail::hefsi_fetch_in(root, mnt, dir, name, kind, &cnt); @@ -1021,7 +1027,7 @@ _Output Bool HeFileSystemParser::INodeManip(_Input DriveTrait* mnt, VoidPtr bloc SizeT cnt_slice = 0; while (cnt_slice < kHeFSSliceCount) { - struct HEFS_INODE_SLICE& slice = start.fSlices[cnt_slice]; + HEFS_SLICE_NODE& slice = start.fSlices[cnt_slice]; mnt->fPacket.fPacketLba = slice.fBase + start.fOffsetSlices; mnt->fPacket.fPacketSize = kHeFSBlockLen; @@ -1174,6 +1180,9 @@ 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)); + MUST_PASS(parser.INodeManip(&kMountPoint, contents_1, kHeFSBlockLen, u8"/boot", kHeFSFileKindRegular, u8"ジェット警察.txt", YES)); -- cgit v1.2.3