summaryrefslogtreecommitdiffhomepage
path: root/Private/NewBoot/BootKit
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-04-30 20:03:31 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-04-30 20:03:31 +0200
commit32efe47d7ba51b6369baa3619b0a91591beeb1df (patch)
tree38bf1c5c2feaaa2365636814bb538b15ff72ed42 /Private/NewBoot/BootKit
parent86be1e8e08114f40589e5ca74bd52fed04de2cc2 (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.hxx70
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;