/*++ Copyright (c) 2024, Quinn Stephens. Provided under the BSD 3-Clause license. Module Name: bootopt.c Abstract: Provides boot option utilities. --*/ #include "bootlib.h" ULONG BlGetBootOptionSize ( IN PBOOT_ENTRY_OPTION Option ) /*++ Routine Description: Gets the size of a boot option. Arguments: Option - The boot option. Return Value: The size of the option. --*/ { ULONG TotalSize; if (Option->DataOffset != 0) { TotalSize = Option->DataOffset + Option->DataSize; } else { TotalSize = sizeof(BOOT_ENTRY_OPTION); } if (Option->OtherOptionsOffset != 0) { TotalSize += BlGetBootOptionListSize((PBOOT_ENTRY_OPTION)((PUCHAR)Option + Option->OtherOptionsOffset)); } return TotalSize; } ULONG BlGetBootOptionListSize ( IN PBOOT_ENTRY_OPTION Options ) /*++ Routine Description: Gets the total size of a list boot options. Arguments: Options - The boot option list. Return Value: The size of the option list. --*/ { ULONG TotalSize, NextOffset; PBOOT_ENTRY_OPTION Option; TotalSize = 0; NextOffset = 0; do { Option = (PBOOT_ENTRY_OPTION)((PUCHAR)Options + NextOffset); NextOffset = Option->NextOptionOffset; TotalSize += BlGetBootOptionSize(Option); } while (NextOffset != 0); return TotalSize; }