MCPcopy Create free account
hub / github.com/CloverHackyColor/CloverBootloader / ParseBootOption

Function ParseBootOption

rEFIt_UEFI/Platform/BootOptions.cpp:563–620  ·  view source on GitHub ↗

Parses BootXXXX (XXXX = BootNum) var (from BootOption->Variable) and returns it in BootOption. * BootOption->Variable, BootOption->VariableSize and BootOption->BootNum must be set. */

Source from the content-addressed store, hash-verified

561 * BootOption->Variable, BootOption->VariableSize and BootOption->BootNum must be set.
562 */
563EFI_STATUS
564ParseBootOption (
565 OUT BO_BOOT_OPTION *BootOption
566 )
567{
568 UINT8 *Ptr8;
569 UINT8 *VarStart;
570 UINT8 *VarEnd;
571
572
573 if (BootOption->Variable == NULL ||
574 BootOption->VariableSize <= sizeof(BootOption->Attributes) + sizeof(BootOption->FilePathListLength)
575 ) {
576 DBG("ParseBootOption: invalid input params\n");
577 return EFI_INVALID_PARAMETER;
578 }
579
580 VarStart = (UINT8*)BootOption->Variable;
581 VarEnd = VarStart + BootOption->VariableSize;
582 Ptr8 = VarStart;
583
584 // Attributes
585 BootOption->Attributes = *((UINT32*)Ptr8);
586 Ptr8 += sizeof(BootOption->Attributes);
587
588 // FilePathListLength
589 BootOption->FilePathListLength = *((UINT16*)Ptr8);
590 Ptr8 += sizeof(BootOption->FilePathListLength);
591
592 // Description and it's size
593 BootOption->Description = (CHAR16*)Ptr8;
594 BootOption->DescriptionSize = StrSize(BootOption->Description);
595 Ptr8 += BootOption->DescriptionSize;
596 if (Ptr8 > VarEnd) {
597 DBG("ParseBootOption: invalid boot variable\n");
598 return EFI_INVALID_PARAMETER;
599 }
600
601 // FilePathList
602 BootOption->FilePathList = (EFI_DEVICE_PATH_PROTOCOL*)Ptr8;
603 Ptr8 += BootOption->FilePathListLength;
604 if (Ptr8 > VarEnd) {
605 DBG("ParseBootOption: invalid boot variable\n");
606 return EFI_INVALID_PARAMETER;
607 }
608
609 // OptionalData and it's size
610 if (Ptr8 < VarEnd) {
611 BootOption->OptionalData = Ptr8;
612 BootOption->OptionalDataSize = VarEnd - Ptr8;
613 } else {
614 BootOption->OptionalData = NULL;
615 BootOption->OptionalDataSize = 0;
616 }
617 Ptr8 += BootOption->OptionalDataSize;
618
619 return EFI_SUCCESS;
620}

Callers 2

GetBootOptionFunction · 0.85
SetBootCurrentFunction · 0.85

Calls 1

StrSizeFunction · 0.50

Tested by

no test coverage detected