mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-14 10:05:43 +01:00
52 lines
1.2 KiB
C
52 lines
1.2 KiB
C
|
#include <Library/UefiLib.h>
|
||
|
#include <Library/ShellLib.h>
|
||
|
#include <Library/MemLogLib.h>
|
||
|
|
||
|
EFI_STATUS
|
||
|
EFIAPI
|
||
|
BdmesgMain(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
|
||
|
{
|
||
|
static CHAR16 const NoMemLog[] = L"%EUnsuccessful getting memory log%N\n";
|
||
|
static CHAR16 const Usage[] = L"%HUsage: bdmesg [-b]\n -b: paginate%N\n";
|
||
|
CHAR8 const* log;
|
||
|
LIST_ENTRY* Package;
|
||
|
UINTN logLength, numPrinted;
|
||
|
EFI_STATUS Status;
|
||
|
BOOLEAN SkipLn;
|
||
|
|
||
|
logLength = GetMemLogLen();
|
||
|
log = GetMemLogBuffer();
|
||
|
if (!log) {
|
||
|
ShellPrintEx(-1, -1, &NoMemLog[0]);
|
||
|
return EFI_NOT_FOUND;
|
||
|
}
|
||
|
Status = ShellCommandLineParseEx(&EmptyParamList[0], &Package, NULL, TRUE, FALSE);
|
||
|
if (EFI_ERROR(Status)) {
|
||
|
ShellPrintEx(-1, -1, &Usage[0]);
|
||
|
return EFI_INVALID_PARAMETER;
|
||
|
}
|
||
|
ShellCommandLineFreeVarList(Package);
|
||
|
Status = EFI_SUCCESS;
|
||
|
SkipLn = TRUE;
|
||
|
while (logLength) {
|
||
|
numPrinted = Print(L"%.*a", logLength, log);
|
||
|
if (!numPrinted) {
|
||
|
SkipLn = FALSE;
|
||
|
Status = EFI_ABORTED;
|
||
|
break;
|
||
|
}
|
||
|
if (ShellGetExecutionBreakFlag()) {
|
||
|
Status = EFI_ABORTED;
|
||
|
break;
|
||
|
}
|
||
|
if (numPrinted >= logLength)
|
||
|
break;
|
||
|
logLength -= numPrinted;
|
||
|
log += numPrinted;
|
||
|
}
|
||
|
ShellSetPageBreakMode(FALSE);
|
||
|
if (SkipLn)
|
||
|
Print(L"\n");
|
||
|
return Status;
|
||
|
}
|