diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-01-11 11:51:31 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-01-11 11:51:31 +0100 |
| commit | d4211b210e3e63f69bc3b86555b563a323f8d865 (patch) | |
| tree | 02c9b63b60856ed330da8d0426564b2dba79e604 | |
| parent | c50d283019bfbc43d460e7a66ac58f187897d474 (diff) | |
WIP: Working on a fix for NeFS forks.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
| -rw-r--r-- | dev/Boot/amd64-desktop.make | 2 | ||||
| -rw-r--r-- | dev/Kernel/FSKit/NeFS.h | 11 | ||||
| -rw-r--r-- | dev/Kernel/src/FS/NeFS.cc | 69 | ||||
| -rw-r--r-- | dev/Kernel/src/KernelMain.cc | 2 | ||||
| -rw-r--r-- | dev/LibSCI/libsci.json | 2 | ||||
| -rw-r--r-- | public/frameworks/.keep | 0 |
6 files changed, 30 insertions, 56 deletions
diff --git a/dev/Boot/amd64-desktop.make b/dev/Boot/amd64-desktop.make index 84ff8187..395b4e86 100644 --- a/dev/Boot/amd64-desktop.make +++ b/dev/Boot/amd64-desktop.make @@ -50,7 +50,7 @@ BOOTLOADER=zbaosldr.exe KERNEL=minoskrnl.exe SYSCHK=syschk.sys STARTUP=startup.sys -SCIKIT=LibSCI.dylib +SCIKIT=libSCI.dylib .PHONY: invalid-recipe invalid-recipe: diff --git a/dev/Kernel/FSKit/NeFS.h b/dev/Kernel/FSKit/NeFS.h index b9babad8..1a744ad0 100644 --- a/dev/Kernel/FSKit/NeFS.h +++ b/dev/Kernel/FSKit/NeFS.h @@ -406,19 +406,20 @@ namespace Kernel rt_copy_memory(mNode->Name, new_fork.CatalogName, rt_string_len(mNode->Name)); rt_copy_memory(journal_name.Data(), new_fork.ForkName, rt_string_len(journal_name.Data())); - new_fork.DataSize = xml_data.Length(); - - new_fork.Kind = kNeFSRsrcForkKind; + new_fork.DataSize = kNeFSForkDataSz; + new_fork.Kind = kNeFSRsrcForkKind; parser->CreateFork(mNode, new_fork); kcout << "Commit: " << xml_data.Data() << "\r\nTo: " << journal_name.Data() << endl; - return parser->WriteCatalog(mNode, YES, xml_data.Data(), xml_data.Length(), journal_name.CData()); + auto ret = parser->WriteCatalog(mNode, YES, xml_data.Data(), xml_data.Length(), journal_name.CData()); + + return ret; } private: - Char mStamp[255] = {"/system/zka_journal" kNeFSJournalExt}; + Char mStamp[255] = {"/system/journal_sys" kNeFSJournalExt}; }; namespace Detail diff --git a/dev/Kernel/src/FS/NeFS.cc b/dev/Kernel/src/FS/NeFS.cc index 784275f8..6f4c43b9 100644 --- a/dev/Kernel/src/FS/NeFS.cc +++ b/dev/Kernel/src/FS/NeFS.cc @@ -64,82 +64,55 @@ _Output NFS_FORK_STRUCT* NeFileSystemParser::CreateFork(_Input NFS_CATALOG_STRUC _Input NFS_FORK_STRUCT& the_fork) { if (catalog && the_fork.ForkName[0] != 0 && - the_fork.DataSize <= kNeFSForkDataSz) + the_fork.DataSize == kNeFSForkDataSz) { Lba lba = (the_fork.Kind == kNeFSDataForkKind) ? catalog->DataFork : catalog->ResourceFork; - kcout << "Fork LBA: " << hex_number(lba) << endl; - - if (lba <= kNeFSCatalogStartAddress) - return nullptr; - auto drv = kDiskMountpoint.A(); /// special treatment. rt_copy_memory((VoidPtr) "fs/nefs-packet", drv.fPacket.fPacketMime, rt_string_len("fs/nefs-packet")); - NFS_FORK_STRUCT curFork{0}; - NFS_FORK_STRUCT prevFork{0}; - Lba lbaOfPreviousFork = lba; + NFS_FORK_STRUCT cur_fork{0}; + Lba lba_prev_fork = lba; /// do not check for anything. Loop until we get what we want, that is a free fork zone. while (lba <= kNeFSCatalogStartAddress) { drv.fPacket.fPacketLba = lba; drv.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); - drv.fPacket.fPacketContent = &curFork; + drv.fPacket.fPacketContent = &cur_fork; drv.fInput(&drv.fPacket); - if (curFork.NextSibling > kBadAddress) - { - kcout << "Bad fork: " << hex_number(curFork.NextSibling) << endl; - break; - } - - kcout << "Next fork: " << hex_number(curFork.NextSibling) << endl; + kcout << "Next fork: " << hex_number(cur_fork.NextSibling) << endl; - if (curFork.Flags & kNeFSFlagCreated) + if (cur_fork.Flags & kNeFSFlagCreated) { - kcout << "Fork already exists.\r"; - /// sanity check. - if (StringBuilder::Equals(curFork.ForkName, the_fork.ForkName) && - StringBuilder::Equals(curFork.CatalogName, catalog->Name)) + if (StringBuilder::Equals(cur_fork.ForkName, the_fork.ForkName) && + StringBuilder::Equals(cur_fork.CatalogName, catalog->Name)) + { + kcout << "Fork already exists.\r"; return nullptr; + } - kcout << "Next fork: " << hex_number(curFork.NextSibling) << endl; - - lbaOfPreviousFork = lba; - lba = curFork.NextSibling; + kcout << "Next fork: " << hex_number(cur_fork.NextSibling) << endl; - prevFork = curFork; + lba_prev_fork = lba; + lba = cur_fork.NextSibling; } else { - /// This is a check that we have, in order to link the previous fork - /// entry. - if (lba >= kNeFSCatalogStartAddress) - { - drv.fPacket.fPacketLba = lbaOfPreviousFork; - drv.fPacket.fPacketSize = sizeof(NFS_FORK_STRUCT); - drv.fPacket.fPacketContent = &prevFork; - - prevFork.NextSibling = lba; - - /// write to disk. - drv.fOutput(&drv.fPacket); - } - break; } } the_fork.Flags |= kNeFSFlagCreated; the_fork.DataOffset = lba - sizeof(NFS_FORK_STRUCT); - the_fork.PreviousSibling = lbaOfPreviousFork; + the_fork.PreviousSibling = lba_prev_fork; the_fork.NextSibling = the_fork.DataOffset - the_fork.DataSize - sizeof(NFS_FORK_STRUCT); drv.fPacket.fPacketLba = lba; @@ -279,9 +252,9 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::CreateCatalog(_Input const Char* /// Locate parent catalog, to then allocate right after it. - for (SizeT indexFill = 0; indexFill < rt_string_len(name); ++indexFill) + for (SizeT index_fill = 0; index_fill < rt_string_len(name); ++index_fill) { - parent_name[indexFill] = name[indexFill]; + parent_name[index_fill] = name[index_fill]; } SizeT index_reverse_copy = rt_string_len(parent_name); @@ -387,7 +360,7 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::CreateCatalog(_Input const Char* return nullptr; } - child_catalog->DataFork = part_block->DiskSize - start_free; + child_catalog->DataFork = part_block->DiskSize - kNeFSRootCatalogStartAddress - start_free; child_catalog->ResourceFork = child_catalog->DataFork; // Write the new catalog next sibling, if we don't know this parent. // @@ -755,9 +728,9 @@ _Output NFS_CATALOG_STRUCT* NeFileSystemParser::FindCatalog(_Input const Char* c { Char parent_name[kNeFSNodeNameLen] = {0}; - for (SizeT indexFill = 0; indexFill < rt_string_len(catalog_name); ++indexFill) + for (SizeT index_fill = 0; index_fill < rt_string_len(catalog_name); ++index_fill) { - parent_name[indexFill] = catalog_name[indexFill]; + parent_name[index_fill] = catalog_name[index_fill]; } SizeT index_reverse_copy = rt_string_len(parent_name); @@ -1055,7 +1028,7 @@ namespace Kernel::Detail kcout << "Creating A:\r"; kDiskMountpoint.A() = io_construct_main_drive(); - + kcout << "Creating A: [ OK ]\r"; return true; diff --git a/dev/Kernel/src/KernelMain.cc b/dev/Kernel/src/KernelMain.cc index 06223ff9..fea439ca 100644 --- a/dev/Kernel/src/KernelMain.cc +++ b/dev/Kernel/src/KernelMain.cc @@ -72,7 +72,7 @@ namespace Kernel::Detail mJournal.CreateJournal(mNeFS); KString xml; - xml += "<LOG_XML>Formatted Filesystem</LOG_XML>"; + xml += "<LOG_XML>Format Filesystem NeFS for ZkaOS.</LOG_XML>"; KString name; name += "NeFS Format System"; diff --git a/dev/LibSCI/libsci.json b/dev/LibSCI/libsci.json index 34f4fb0a..8b54828d 100644 --- a/dev/LibSCI/libsci.json +++ b/dev/LibSCI/libsci.json @@ -3,7 +3,7 @@ "compiler_std": "c++20", "headers_path": ["../", "./"], "sources_path": ["src/*.cc", "src/*.o"], - "output_name": "LibSCI.dylib", + "output_name": "libSCI.dylib", "compiler_flags": [ "-fPIC", "-ffreestanding", diff --git a/public/frameworks/.keep b/public/frameworks/.keep new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/public/frameworks/.keep |
