summaryrefslogtreecommitdiffhomepage
path: root/Private/NewBoot/Source/FileReader.cxx
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-04 20:32:18 +0100
committerAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-04 20:32:18 +0100
commitb76f26d281c77e3fa028d4217a1456c43ab68d06 (patch)
tree66cebff0951c52fbf0b5289ca4c1ee3584e33776 /Private/NewBoot/Source/FileReader.cxx
parent9fe3b6e1e2447a11644307e83df2b109b24fe0d1 (diff)
HCR-11 : Found the reason why it doesn't work, fixing it tomorrow.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/NewBoot/Source/FileReader.cxx')
-rw-r--r--Private/NewBoot/Source/FileReader.cxx42
1 files changed, 25 insertions, 17 deletions
diff --git a/Private/NewBoot/Source/FileReader.cxx b/Private/NewBoot/Source/FileReader.cxx
index a66f2c71..be0e7746 100644
--- a/Private/NewBoot/Source/FileReader.cxx
+++ b/Private/NewBoot/Source/FileReader.cxx
@@ -16,6 +16,10 @@
#include <EFIKit/Api.hxx>
#include <EFIKit/Handover.hxx>
+#include "EFIKit/EFI.hxx"
+#include "KernelKit/PE.hpp"
+#include "NewKit/Defines.hpp"
+
////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
@@ -85,12 +89,10 @@ Void BFileReader::Fetch(EfiHandlePtr ImageHandle) {
return;
}
- /// Open kernel.
-
- EfiFileProtocol* kernelFile;
+ EfiFileProtocol* kernelFile = nullptr;
- if (rootFs->Open(rootFs, &kernelFile, mPath, kEFIFileRead,
- kEFIReadOnly | kEFIHidden | kEFISystem) != kEfiOk) {
+ if (rootFs->Open(rootFs, &kernelFile, mPath, kEFIFileRead, kEFIReadOnly) !=
+ kEfiOk) {
mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: No-Such-Path: ")
.WriteString(mPath)
.WriteString(L"\r\n");
@@ -98,6 +100,8 @@ Void BFileReader::Fetch(EfiHandlePtr ImageHandle) {
return;
}
+ rootFs->Close(rootFs);
+
if (kernelFile->Revision < EFI_FILE_PROTOCOL_REVISION2) {
mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: Invalid-Revision: ")
.WriteString(mPath)
@@ -108,12 +112,13 @@ Void BFileReader::Fetch(EfiHandlePtr ImageHandle) {
/// File FAT info.
UInt32 szInfo = sizeof(EfiFileInfo);
- EfiFileInfo info{0};
+ EfiFileInfo* info = nullptr;
+
+ BS->AllocatePool(EfiLoaderData, szInfo, (void**)&info);
guidEfp = EfiGUID(EFI_FILE_INFO_GUID);
- if (kernelFile->GetInfo(kernelFile, &guidEfp, &szInfo, (void*)&info) !=
- kEfiOk) {
+ if (kernelFile->GetInfo(kernelFile, &guidEfp, &szInfo, info) != kEfiOk) {
mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: No-Such-Path: ")
.WriteString(mPath)
.WriteString(L"\r\n");
@@ -126,23 +131,26 @@ Void BFileReader::Fetch(EfiHandlePtr ImageHandle) {
VoidPtr blob = (VoidPtr)kHandoverStartKernel;
- mWriter.WriteString(L"HCoreLdr: Fetch-Info: OK...").WriteString(L"\r\n");
+ if (BS->AllocatePages(AllocateAnyPages, EfiLoaderData, 1,
+ (EfiPhysicalAddress*)&blob) != kEfiOk) {
+ EFI::RaiseHardError(L"HCoreLdr_PageError", L"Allocation error.");
+ }
+
+ UInt32* sz = nullptr;
+
+ BS->AllocatePool(EfiLoaderData, sizeof(UInt32), (VoidPtr*)&sz);
- UInt32 sz = info.FileSize;
+ *sz = info->FileSize;
- BSetMem((CharacterType*)blob, 0, sz);
+ mWriter.WriteString(L"HCoreLdr: Fetch-Info: Read...").WriteString(L"\r\n");
- auto resultEfiRead = kernelFile->Read(kernelFile, &sz, blob);
- kernelFile->Close(kernelFile);
+ kernelFile->Read(kernelFile, sz, blob);
- if (resultEfiRead != kEfiOk) return;
+ mWriter.WriteString(L"HCoreLdr: Fetch-Info: Success...").WriteString(L"\r\n");
mCached = true;
mErrorCode = kOperationOkay;
-
mBlob = blob;
// We are done!
-
- mWriter.WriteString(L"HCoreLdr: Fetch: OK.").WriteString(L"\r\n");
}