diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-04-30 20:03:31 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-04-30 20:03:31 +0200 |
| commit | 32efe47d7ba51b6369baa3619b0a91591beeb1df (patch) | |
| tree | 38bf1c5c2feaaa2365636814bb538b15ff72ed42 /Private/NewBoot/BootKit | |
| parent | 86be1e8e08114f40589e5ca74bd52fed04de2cc2 (diff) | |
Kernel: Fix NewFS catalog creation.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'Private/NewBoot/BootKit')
| -rw-r--r-- | Private/NewBoot/BootKit/BootKit.hxx | 70 |
1 files changed, 2 insertions, 68 deletions
diff --git a/Private/NewBoot/BootKit/BootKit.hxx b/Private/NewBoot/BootKit/BootKit.hxx index 7b3c1d93..212e8914 100644 --- a/Private/NewBoot/BootKit/BootKit.hxx +++ b/Private/NewBoot/BootKit/BootKit.hxx @@ -183,12 +183,7 @@ public: /// @brief File entry for **BDiskFormatFactory**. struct BFileDescriptor final { Char fFileName[kNewFSNodeNameLen]; - Char fForkName[kNewFSNodeNameLen]; - Int32 fKind; - - VoidPtr fBlob; - SizeT fBlobSz; }; public: @@ -255,23 +250,14 @@ private: BTextWriter writer; Char bufCatalog[sizeof(NewCatalog)] = { 0 }; - Char bufFork[sizeof(NewFork)] = { 0 }; NewCatalog* catalogKind = (NewCatalog*)bufCatalog; catalogKind->PrevSibling = startLba; - catalogKind->NextSibling = (sizeof(NewCatalog) + sizeof(NewFork) + blob->fBlobSz); + catalogKind->NextSibling = (startLba + sizeof(NewCatalog)); /// Fill catalog kind. catalogKind->Kind = blob->fKind; - - /// Allocate fork for blob. - if (catalogKind->Kind == kNewFSDataForkKind) { - catalogKind->DataFork = (startLba + sizeof(NewCatalog)); - catalogKind->DataForkSize += blob->fBlobSz; - } else { - catalogKind->ResourceFork = (startLba + sizeof(NewCatalog)); - catalogKind->ResourceForkSize += blob->fBlobSz; - } + catalogKind->Flags = kNewFSFlagCreated; /// before going to forks, we must check for the catalog name first. if (blob->fKind == kNewFSCatalogKindDir && @@ -279,58 +265,9 @@ private: EFI::ThrowError(L"Developer-Error", L"This is caused by the developer of the bootloader."); } - NewFork* forkKind = (NewFork*)bufFork; - - memcpy(forkKind->Name, blob->fForkName, strlen(blob->fForkName)); - forkKind->Kind = (forkKind->Name[0] == kNewFSDataFork[0]) ? kNewFSDataForkKind : kNewFSRsrcForkKind; - forkKind->Flags = kNewFSFlagCreated; - - /// We don't know. - forkKind->ResourceFlags = 0; - forkKind->ResourceId = 0; - forkKind->ResourceKind = 0; - - /// We're the only fork here. - forkKind->NextSibling = forkKind->Kind == kNewFSDataForkKind ? catalogKind->DataFork : catalogKind->ResourceFork; - forkKind->PreviousSibling = kNewFSDataForkKind ? catalogKind->DataFork : catalogKind->ResourceFork; - - forkKind->DataOffset = (startLba + sizeof(NewCatalog) + sizeof(NewFork)); - forkKind->DataSize = blob->fBlobSz; - - SizeT cur = 0UL; - writer.Write((catalogKind->Kind == kNewFSCatalogKindFile) ? L"New Boot: Write-File: " : L"New Boot: Write-Directory: " ).Write(blob->fFileName).Write(L"\r"); - /// Set disk cursor here. - - fDiskDev.Leak().mBase = startLba + sizeof(NewCatalog); - fDiskDev.Leak().mSize = sizeof(NewFork); - - fDiskDev.Write((Char*)bufFork, sizeof(NewFork)); - - do { - this->fDiskDev.Leak().mSize = BootDev::kSectorSize; - this->fDiskDev.Leak().mBase = (forkKind->DataOffset + cur); - - this->fDiskDev.Write((Char*)(blob->fBlob) + cur, BootDev::kSectorSize); - - cur += BootDev::kSectorSize; - } while (cur < forkKind->DataSize); - - /// Fork is done. - - catalogKind->Kind = blob->fKind; - catalogKind->Flags = kNewFSFlagCreated; - - //// Now write catalog as well.. - - /// this mime only applies to file. - if (catalogKind->Kind == kNewFSCatalogKindFile) { - memcpy(catalogKind->Mime, kBKBootFileMime, strlen(kBKBootFileMime)); - } else { - memcpy(catalogKind->Mime, kBKBootDirMime, strlen(kBKBootDirMime)); - } memcpy(catalogKind->Name, blob->fFileName, strlen(blob->fFileName)); @@ -339,12 +276,9 @@ private: fDiskDev.Write((Char*)bufCatalog, sizeof(NewCatalog)); - startLba += (sizeof(NewCatalog) + sizeof(NewFork) + blob->fBlobSz); - --partBlock.FreeCatalog; --partBlock.FreeSectors; - memset(bufFork, 0, sizeof(NewFork)); memset(bufCatalog, 0, sizeof(NewCatalog)); return true; |
