/*++ 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_APPLICATION_OPTION Option ) /*++ Routine Description: Gets the size of a boot option. Arguments: Option - the boot option to get the size of. Return Value: The size of the option. --*/ { ULONG TotalSize; if (Option->DataOffset != 0) { TotalSize = Option->DataOffset + Option->DataSize; } else { TotalSize = sizeof(BOOT_APPLICATION_OPTION); } if (Option->OtherOptionsOffset != 0) { TotalSize += BlGetBootOptionListSize((PBOOT_APPLICATION_OPTION)((PUCHAR)Option + Option->OtherOptionsOffset)); } return TotalSize; } ULONG BlGetBootOptionListSize ( IN PBOOT_APPLICATION_OPTION Options ) /*++ Routine Description: Gets the total size of a list boot options. Arguments: Options - the boot option list to get the size of. Return Value: The size of the options. --*/ { ULONG TotalSize, NextOffset; PBOOT_APPLICATION_OPTION Option; TotalSize = 0; NextOffset = 0; do { Option = (PBOOT_APPLICATION_OPTION)((PUCHAR)Options + NextOffset); NextOffset = Option->NextOptionOffset; TotalSize += BlGetBootOptionSize(Option); } while (NextOffset != 0); return TotalSize; }