@param[in] List The pointer to pointer to list.\r
**/\r
VOID\r
-EFIAPI\r
FreeEnvironmentVariableList(\r
IN LIST_ENTRY *List\r
)\r
@retval EFI_SUCCESS the list was created sucessfully.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
GetEnvironmentVariableList(\r
IN OUT LIST_ENTRY *ListHead\r
)\r
Status = EFI_OUT_OF_RESOURCES;\r
} else {\r
ValSize = ValBufferSize;\r
- VarList->Val = AllocateZeroPool(ValSize);\r
+ //\r
+ // We need another CHAR16 to save '\0' in VarList->Val.\r
+ //\r
+ VarList->Val = AllocateZeroPool (ValSize + sizeof (CHAR16));\r
if (VarList->Val == NULL) {\r
SHELL_FREE_NON_NULL(VarList);\r
Status = EFI_OUT_OF_RESOURCES;\r
if (Status == EFI_BUFFER_TOO_SMALL){\r
ValBufferSize = ValSize > ValBufferSize * 2 ? ValSize : ValBufferSize * 2;\r
SHELL_FREE_NON_NULL (VarList->Val);\r
- VarList->Val = AllocateZeroPool(ValBufferSize);\r
+ //\r
+ // We need another CHAR16 to save '\0' in VarList->Val.\r
+ //\r
+ VarList->Val = AllocateZeroPool (ValBufferSize + sizeof (CHAR16));\r
if (VarList->Val == NULL) {\r
SHELL_FREE_NON_NULL(VarList);\r
Status = EFI_OUT_OF_RESOURCES;\r
@retval EFI_SUCCESS the list was Set sucessfully.\r
**/\r
EFI_STATUS\r
-EFIAPI\r
SetEnvironmentVariableList(\r
IN LIST_ENTRY *ListHead\r
)\r
; !IsNull(ListHead, &Node->Link)\r
; Node = (ENV_VAR_LIST*)GetNextNode(ListHead, &Node->Link)\r
){\r
- Size = StrSize(Node->Val);\r
+ Size = StrSize (Node->Val) - sizeof (CHAR16);\r
if (Node->Atts & EFI_VARIABLE_NON_VOLATILE) {\r
Status = SHELL_SET_ENVIRONMENT_VARIABLE_NV(Node->Key, Size, Node->Val);\r
} else {\r
@sa SetEnvironmentVariableList\r
**/\r
EFI_STATUS\r
-EFIAPI\r
SetEnvironmentVariables(\r
IN CONST CHAR16 **Environment\r
)\r