diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-05-01 07:22:14 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-05-01 07:22:14 +0200 |
| commit | 56d756fe73e9c206b333276f0cde1c1dc13999c2 (patch) | |
| tree | b5e16ad794a95a5c007aad8a613cab0e02399fee /Private/Source | |
| parent | 39252db4317b2e53eee59217ca7bb42a0b531443 (diff) | |
kernel: Fixes and improvements.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'Private/Source')
| -rw-r--r-- | Private/Source/AppMain.cxx | 47 | ||||
| -rw-r--r-- | Private/Source/FS/NewFS.cxx | 33 |
2 files changed, 54 insertions, 26 deletions
diff --git a/Private/Source/AppMain.cxx b/Private/Source/AppMain.cxx index 6dc2a3ff..c113958a 100644 --- a/Private/Source/AppMain.cxx +++ b/Private/Source/AppMain.cxx @@ -40,16 +40,6 @@ class FilesystemAutomountProvider final { NewOS::FilesystemManagerInterface::Mount(fNewFS); - constexpr auto sanitizerSize = 512; - - /// Sample AMD64 program, - /// mov rax, 0x0 - /// ret - /// @note there was a 0xc1 before, to delimit the program, but I removed - /// it. We don't need that now. - NewOS::UInt8 sanitizerBytes[sanitizerSize] = { - "\x48\xC7\xC0\x00\x00\x00\x00\xC3"}; - if (fNewFS->GetImpl()) { NewCatalog* sanitizerCatalog = nullptr; @@ -62,7 +52,44 @@ class FilesystemAutomountProvider final { kNewFSCatalogKindDir); delete fNewFS->GetImpl()->CreateCatalog("/Applications/", 0, kNewFSCatalogKindDir); + + NewFork theFork{0}; + + const NewOS::Char* cSrcName = "FolderInfo"; + + NewOS::rt_copy_memory((NewOS::VoidPtr)(cSrcName), + theFork.ForkName, + NewOS::rt_string_len(cSrcName)); + + theFork.DataSize = kNewFSForkSize; + theFork.ResourceId = 0; + theFork.ResourceKind = NewOS::kNewFSRsrcForkKind; + theFork.Kind = NewOS::kNewFSDataForkKind; + + const NewOS::Char metadataFolder[kNewFSSectorSz] = + "<p>Kind: folder</p>\r<p>Created by System.</p>\r"; + const NewOS::SizeT metadataSz = kNewFSSectorSz; + + auto catalogSystem = fNewFS->GetImpl()->GetCatalog("/System/"); + + fNewFS->GetImpl()->CreateFork(catalogSystem, theFork); + + fNewFS->GetImpl()->WriteCatalog(catalogSystem, + (NewOS::VoidPtr)(metadataFolder), + metadataSz, "FolderInfo"); + + delete catalogSystem; + + catalogSystem = fNewFS->GetImpl()->GetCatalog("/Support/"); + + fNewFS->GetImpl()->CreateFork(catalogSystem, theFork); + + fNewFS->GetImpl()->WriteCatalog(catalogSystem, + (NewOS::VoidPtr)(metadataFolder), + metadataSz, "FolderInfo"); } + + NewOS::kcout << (NewOS::Char*)fNewFS->GetImpl()->ReadCatalog(fNewFS->GetImpl()->GetCatalog("/System/"), 512, "FolderInfo"); } } } diff --git a/Private/Source/FS/NewFS.cxx b/Private/Source/FS/NewFS.cxx index d3d75fb2..9074b348 100644 --- a/Private/Source/FS/NewFS.cxx +++ b/Private/Source/FS/NewFS.cxx @@ -31,7 +31,7 @@ _Output NewFork* NewFSParser::CreateFork(_Input NewCatalog* catalog, Lba lba = (theFork.Kind == kNewFSDataForkKind) ? catalog->DataFork : catalog->ResourceFork; - kcout << "Data-Fork-Lba: " << hex_number(lba) << endl; + kcout << "Fork-Lba: " << hex_number(lba) << endl; if (lba <= kNewFSCatalogStartAddress) return nullptr; @@ -41,29 +41,29 @@ _Output NewFork* NewFSParser::CreateFork(_Input NewCatalog* catalog, rt_copy_memory((VoidPtr) "fs/newfs-packet", drv->fPacket.fPacketMime, rt_string_len("fs/newfs-packet")); - NewFork cpyFork{0}; + NewFork curFork{0}; NewFork prevFork{0}; Lba lbaOfPreviousFork = lba; - while (cpyFork.ForkName[0] == 0) { + while (curFork.ForkName[0] == 0) { if (lba <= kNewFSCatalogStartAddress) break; drv->fPacket.fLba = lba; drv->fPacket.fPacketSize = sizeof(NewFork); - drv->fPacket.fPacketContent = &cpyFork; + drv->fPacket.fPacketContent = &curFork; drv->fInput(&drv->fPacket); - kcout << "New OS: Next-Fork: " << hex_number(cpyFork.NextSibling) << endl; + kcout << "New OS: Next-Fork: " << hex_number(curFork.NextSibling) << endl; - if (cpyFork.Flags == kNewFSFlagCreated) { + if (curFork.Flags == kNewFSFlagCreated) { kcout << "New OS: Fork already exists.\r"; - if (StringBuilder::Equals(cpyFork.ForkName, theFork.ForkName)) return nullptr; + if (StringBuilder::Equals(curFork.ForkName, theFork.ForkName)) return nullptr; lbaOfPreviousFork = lba; - lba = cpyFork.NextSibling; + lba = curFork.NextSibling; - prevFork = cpyFork; + prevFork = curFork; } else { /// This is a check that we have, in order to link the previous fork /// entry. @@ -153,16 +153,16 @@ _Output NewFork* NewFSParser::FindFork(_Input NewCatalog* catalog, /// @brief Simpler factory to create a catalog (assumes you want to create a /// file.) /// @param name -/// @return +/// @return catalog pointer. _Output NewCatalog* NewFSParser::CreateCatalog(_Input const char* name) { return this->CreateCatalog(name, 0, kNewFSCatalogKindFile); } -/// @brief -/// @param name -/// @param flags -/// @param kind -/// @return +/// @brief Creates a new catalog into the disk. +/// @param name the catalog name. +/// @param flags the flags of the catalog. +/// @param kind the catalog kind. +/// @return catalog pointer. _Output NewCatalog* NewFSParser::CreateCatalog(_Input const char* name, _Input const Int32& flags, _Input const Int32& kind) { @@ -208,7 +208,7 @@ _Output NewCatalog* NewFSParser::CreateCatalog(_Input const char* name, // mandatory / character. parentName[--indexReverseCopy] = 0; - while (parentName[indexReverseCopy] != '/') { + while (parentName[indexReverseCopy] != NewFilesystemHelper::Separator()) { parentName[indexReverseCopy] = 0; --indexReverseCopy; } @@ -323,6 +323,7 @@ _Output NewCatalog* NewFSParser::CreateCatalog(_Input const char* name, partBlock->SectorCount -= 1; partBlock->CatalogCount += 1; partBlock->FreeCatalog -= 1; + partBlock->FreeCatalog = catalogChild->NextSibling; drive->fOutput(&drive->fPacket); |
