\r
Abstract:\r
\r
- Provide support functions for variable services.\r
+Revision History\r
\r
--*/\r
\r
\r
Returns:\r
\r
- EFI_INVALID_PARAMETER - Parameters not valid\r
- EFI_SUCCESS - Variable store successfully updated\r
+ EFI STATUS\r
\r
--*/\r
{\r
if ((DataPtr + DataSize) >= ((UINTN) ((UINT8 *) VolatileBase + VolatileBase->Size))) {\r
return EFI_INVALID_PARAMETER;\r
}\r
-\r
- //\r
- // If Volatile Variable just do a simple mem copy.\r
- //\r
+ }\r
+ //\r
+ // If Volatile Variable just do a simple mem copy.\r
+ //\r
+ if (Volatile) {\r
CopyMem ((UINT8 *) ((UINTN) DataPtr), Buffer, DataSize);\r
return EFI_SUCCESS;\r
}\r
&CurrWriteSize,\r
CurrBuffer\r
);\r
- return Status;\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
} else {\r
Size = (UINT32) (LinearOffset + PtrBlockMapEntry->BlockLength - CurrWritePtr);\r
Status = EfiFvbWriteBlock (\r
// The size of the VariableName, including the Unicode Null in bytes plus\r
// the DataSize is limited to maximum size of MAX_VARIABLE_SIZE (1024) bytes.\r
//\r
- else if (sizeof (VARIABLE_HEADER) + ArrayLength (VariableName) + DataSize > MAX_VARIABLE_SIZE) {\r
+ else if ((DataSize > MAX_VARIABLE_SIZE) ||\r
+ (sizeof (VARIABLE_HEADER) + ArrayLength (VariableName) + DataSize > MAX_VARIABLE_SIZE)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
//\r