8#include <Library/BaseLib.h>
9#include <Library/BaseMemoryLib.h>
10#include <Library/MemoryAllocationLib.h>
27 return EFI_OUT_OF_RESOURCES;
59 if (AsciiStrCmp (Var->
Key, Key) == 0) {
64 if (Index < mGrubVars->Count) {
74 Var->
Errors &= ~VAR_ERR_HAS_VARS;
86 "LNX: Repeated %a=%a (0x%x->0x%x)\n",
95 return EFI_OUT_OF_RESOURCES;
104 "LNX: Added %a=%a (0x%x)\n",
137 if (AsciiStrCmp (Var->
Key, Key) == 0) {
155 for (Index = 0; Index < Options->Count; Index++) {
159 if (EFI_ERROR (Status)) {
173 IN CONST CHAR8 *Value,
174 IN OUT CHAR8 **Result
193 return EFI_INVALID_PARAMETER;
197 if (StringBuffer == NULL) {
198 return EFI_OUT_OF_RESOURCES;
204 Status = EFI_SUCCESS;
214 if ((Ch ==
'$') || (Ch ==
'\0')) {
221 ((CHAR8 *)Value)[
Pos] =
'\0';
224 DEBUG ((DEBUG_WARN,
"LNX: Missing required grub var $%a\n", &Value[LastPos]));
225 Status = EFI_INVALID_PARAMETER;
226 }
else if (Var->
Errors != 0) {
227 DEBUG ((DEBUG_WARN,
"LNX: Unusable grub var $%a - 0x%x\n", &Value[LastPos], Var->
Errors));
228 Status = EFI_INVALID_PARAMETER;
231 ((CHAR8 *)Value)[
Pos] = Ch;
240 if (!EFI_ERROR (Status)) {
241 if (Var->
Value != NULL) {
242 VarLength = AsciiStrLen (Var->
Value);
243 if ((VarLength > 0) && (Var->
Value[VarLength - 1] ==
' ')) {
251 if (!EFI_ERROR (Status) && !((Ch ==
' ') || (Ch ==
'\0'))) {
265 }
while (Ch !=
'\0' && !EFI_ERROR (Status));
269 if (EFI_ERROR (Status)) {
270 if (*Result != NULL) {
278 "LNX: Expanding '%a' => '%a' - %r\n",
EFI_STATUS InternalInitGrubVars(VOID)
EFI_STATUS InternalSetGrubVar(CHAR8 *Key, CHAR8 *Value, UINTN Errors)
BOOLEAN InternalHasGrubVars(CHAR8 *Value)
VOID InternalFreeGrubVars(VOID)
STATIC OC_FLEX_ARRAY * mGrubVars
EFI_STATUS InternalExpandGrubVars(IN CONST CHAR8 *Value, IN OUT CHAR8 **Result)
GRUB_VAR * InternalGetGrubVar(IN CONST CHAR8 *Key)
EFI_STATUS InternalExpandGrubVarsForArray(IN OUT OC_FLEX_ARRAY *Options)
#define LINUX_BOOT_LOG_GRUB_VARS
VOID OcFlexArrayFree(IN OUT OC_FLEX_ARRAY **FlexArray)
CHAR8 * OcAsciiStringBufferFreeContainer(IN OUT OC_ASCII_STRING_BUFFER **StringBuffer)
OC_FLEX_ARRAY * OcFlexArrayInit(IN CONST UINTN ItemSize, IN CONST OC_FLEX_ARRAY_FREE_ITEM FreeItem OPTIONAL)
EFI_STATUS OcAsciiStringBufferAppendN(IN OUT OC_ASCII_STRING_BUFFER *Buffer, IN CONST CHAR8 *AppendString, OPTIONAL IN CONST UINTN Length)
VOID * OcFlexArrayAddItem(IN OUT OC_FLEX_ARRAY *FlexArray)
EFI_STATUS OcAsciiStringBufferAppend(IN OUT OC_ASCII_STRING_BUFFER *Buffer, IN CONST CHAR8 *AppendString OPTIONAL)
VOID * OcFlexArrayItemAt(IN CONST OC_FLEX_ARRAY *FlexArray, IN CONST UINTN Index)
OC_ASCII_STRING_BUFFER * OcAsciiStringBufferInit(VOID)
CHAR8 *EFIAPI OcAsciiStrChr(IN CONST CHAR8 *String, IN CHAR8 Char)