diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-22 14:58:21 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-22 14:58:21 +0200 |
| commit | 8434a141533891ebd7cb5369c0541cb9a9c07971 (patch) | |
| tree | 17b4dd796b3f4f028976c7b4d84148688e748c07 /dev/kernel/src | |
| parent | 902f36756c45035f6adb046af65c56482b3c75ea (diff) | |
fs, HeFS: additional patches regarding tree traversal.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/src')
| -rw-r--r-- | dev/kernel/src/FS/HeFS.cc | 53 |
1 files changed, 29 insertions, 24 deletions
diff --git a/dev/kernel/src/FS/HeFS.cc b/dev/kernel/src/FS/HeFS.cc index 4a46236a..ccd808ad 100644 --- a/dev/kernel/src/FS/HeFS.cc +++ b/dev/kernel/src/FS/HeFS.cc @@ -104,8 +104,9 @@ namespace Kernel if (!grand_parent) { - delete grand_parent; + delete parent; kout << "Error: Failed to allocate memory for index node.\r"; + return; } @@ -147,38 +148,42 @@ namespace Kernel /***********************************************************************************/ STATIC ATTRIBUTE(unused) Void hefsi_rotate_right(HEFS_INDEX_NODE_DIRECTORY* dir, Lba& start, DriveTrait* mnt) { - if (dir->fChild || dir->fNext || dir->fPrev) + HEFS_INDEX_NODE_DIRECTORY* parent = new HEFS_INDEX_NODE_DIRECTORY(); + + if (!parent) { - HEFS_INDEX_NODE_DIRECTORY* parent = new HEFS_INDEX_NODE_DIRECTORY(); + kout << "Error: Failed to allocate memory for index node.\r"; - mnt->fPacket.fPacketLba = dir->fParent; - mnt->fPacket.fPacketSize = sizeof(HEFS_INDEX_NODE_DIRECTORY); - mnt->fPacket.fPacketContent = parent; + return; + } + + mnt->fPacket.fPacketLba = dir->fParent; + mnt->fPacket.fPacketSize = sizeof(HEFS_INDEX_NODE_DIRECTORY); + mnt->fPacket.fPacketContent = parent; - mnt->fInput(mnt->fPacket); + mnt->fInput(mnt->fPacket); - parent->fParent = dir->fParent; - dir->fParent = parent->fParent; - dir->fNext = parent->fChild; - parent->fChild = start; + parent->fParent = dir->fParent; + dir->fParent = parent->fParent; + dir->fNext = parent->fChild; + parent->fChild = start; - mnt->fPacket.fPacketLba = dir->fParent; - mnt->fPacket.fPacketSize = sizeof(HEFS_INDEX_NODE_DIRECTORY); - mnt->fPacket.fPacketContent = parent; + mnt->fPacket.fPacketLba = dir->fParent; + mnt->fPacket.fPacketSize = sizeof(HEFS_INDEX_NODE_DIRECTORY); + mnt->fPacket.fPacketContent = parent; - mnt->fOutput(mnt->fPacket); + mnt->fOutput(mnt->fPacket); - delete parent; - parent = nullptr; + delete parent; + parent = nullptr; - dir->fColor = kHeFSBlack; + dir->fColor = kHeFSBlack; - mnt->fPacket.fPacketLba = start; - mnt->fPacket.fPacketSize = sizeof(HEFS_INDEX_NODE_DIRECTORY); - mnt->fPacket.fPacketContent = dir; + mnt->fPacket.fPacketLba = start; + mnt->fPacket.fPacketSize = sizeof(HEFS_INDEX_NODE_DIRECTORY); + mnt->fPacket.fPacketContent = dir; - mnt->fOutput(mnt->fPacket); - } + mnt->fOutput(mnt->fPacket); } /// @brief Get the index node of a file or directory. @@ -402,7 +407,7 @@ namespace Kernel mnt->fPacket.fPacketLba = start; mnt->fPacket.fPacketSize = sizeof(HEFS_INDEX_NODE_DIRECTORY); mnt->fPacket.fPacketContent = dir; - + mnt->fOutput(mnt->fPacket); } |
