diff options
| author | Amlal <amlal@nekernel.org> | 2025-04-27 03:44:22 +0200 |
|---|---|---|
| committer | Amlal <amlal@nekernel.org> | 2025-04-27 03:44:22 +0200 |
| commit | faee9f200898c0eb7f28ed89cdd16f8afa4438e1 (patch) | |
| tree | a61d1076b9239cb4f107d97e015d8d2c58edd09e /dev/kernel/src/FS/HeFS.cc | |
| parent | 360c69daf7a83ec31c384390d9ec37064b78b40e (diff) | |
dev: fixes and improvements, codebase formating too.
Signed-off-by: Amlal <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/src/FS/HeFS.cc')
| -rw-r--r-- | dev/kernel/src/FS/HeFS.cc | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/dev/kernel/src/FS/HeFS.cc b/dev/kernel/src/FS/HeFS.cc index 13d79c8f..f36cf3b6 100644 --- a/dev/kernel/src/FS/HeFS.cc +++ b/dev/kernel/src/FS/HeFS.cc @@ -79,7 +79,8 @@ namespace Detail { NE_UNUSED(node); if (!dir || !node) { - ke_panic(RUNTIME_CHECK_FILESYSTEM, "Error: Invalid directory node/boot_node in RB-Tree traversal."); + ke_panic(RUNTIME_CHECK_FILESYSTEM, + "Error: Invalid directory node/boot_node in RB-Tree traversal."); } if (dir->fChild != 0) { @@ -315,8 +316,7 @@ namespace Detail { return NO; } - if (parent->fDeleted || - !parent->fCreated) { + if (parent->fDeleted || !parent->fCreated) { mnt->fPacket.fPacketLba = start; mnt->fPacket.fPacketSize = sizeof(HEFS_INDEX_NODE_DIRECTORY); mnt->fPacket.fPacketContent = dir; @@ -790,13 +790,20 @@ _Output Bool HeFileSystemParser::Format(_Input _Output DriveTrait* drive, _Input // Check if the disk is already formatted. - if (KStringBuilder::Equals(root->fMagic, kHeFSMagic)) { + if (KStringBuilder::Equals(root->fMagic, kHeFSMagic) && root->fVersion == kHeFSVersion) { delete root; root = nullptr; err_global_get() = kErrorSuccess; return YES; + } else if (root->fVersion != kHeFSVersion) { + delete root; + root = nullptr; + + err_global_get() = kErrorUnrecoverableDisk; + + return NO; } rt_set_memory(root, 0, sizeof(HEFS_BOOT_NODE)); @@ -835,6 +842,8 @@ _Output Bool HeFileSystemParser::Format(_Input _Output DriveTrait* drive, _Input root->fReserved3 = 0; root->fReserved4 = 0; + root->fVersion = kHeFSVersion; + root->fChecksum = 0; root->fVID = kHeFSInvalidVID; @@ -939,7 +948,7 @@ _Output Bool HeFileSystemParser::CreateDirectory(_Input DriveTrait* drive, _Inpu drive->fInput(drive->fPacket); Detail::hefsi_balance_filesystem(root, drive); - + auto dirent = Detail::hefs_fetch_index_node_directory(root, drive, dir); if (dirent) { @@ -1067,6 +1076,9 @@ _Output Bool HeFileSystemParser::CreateFile(_Input DriveTrait* drive, _Input con node->fFlags = flags; node->fChecksum = 0; + node->fGID = 0; + node->fUID = 0; + wrt_copy_memory((VoidPtr) name, node->fName, wrt_string_len(name)); if (Detail::hefs_allocate_index_node(root, drive, dir, node)) { @@ -1076,18 +1088,21 @@ _Output Bool HeFileSystemParser::CreateFile(_Input DriveTrait* drive, _Input con return YES; } + delete node; + delete root; + return NO; } /// @brief Initialize the HeFS filesystem. /// @return To check its status, see err_local_get(). Boolean fs_init_hefs(Void) noexcept { - kout << "Creating main disk with HeFS in it...\r"; + kout << "Creating HeFS disk...\r"; auto drv = io_construct_main_drive(); if (drv.fPacket.fPacketReadOnly == YES) - ke_panic(RUNTIME_CHECK_FILESYSTEM, "Main filesystem cannot be mounted."); + ke_panic(RUNTIME_CHECK_FILESYSTEM, "Main disk cannot be mounted."); HeFileSystemParser parser; |
