+\r
+UINTN\r
+NameSizeOfVariable (\r
+ IN VARIABLE_HEADER *Variable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ This code gets the size of name of variable.\r
+\r
+Arguments:\r
+\r
+ Variable Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+ UINTN Size of variable in bytes\r
+\r
+--*/\r
+{\r
+ if (Variable->State == (UINT8) (-1) ||\r
+ Variable->DataSize == (UINT32) -1 ||\r
+ Variable->NameSize == (UINT32) -1 ||\r
+ Variable->Attributes == (UINT32) -1) {\r
+ return 0;\r
+ }\r
+ return (UINTN) Variable->NameSize;\r
+}\r
+\r
+UINTN\r
+DataSizeOfVariable (\r
+ IN VARIABLE_HEADER *Variable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ This code gets the size of name of variable.\r
+\r
+Arguments:\r
+\r
+ Variable Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+ UINTN Size of variable in bytes\r
+\r
+--*/\r
+{\r
+ if (Variable->State == (UINT8) -1 ||\r
+ Variable->DataSize == (UINT32) -1 ||\r
+ Variable->NameSize == (UINT32) -1 ||\r
+ Variable->Attributes == (UINT32) -1) {\r
+ return 0;\r
+ }\r
+ return (UINTN) Variable->DataSize;\r
+}\r
+\r
+CHAR16 *\r
+GetVariableNamePtr (\r
+ IN VARIABLE_HEADER *Variable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ This code gets the pointer to the variable name.\r
+\r
+Arguments:\r
+\r
+ Variable Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+ CHAR16* Pointer to Variable Name\r
+\r
+--*/\r
+{\r
+\r
+ return (CHAR16 *) (Variable + 1);\r
+}\r
+\r
+\r
+UINT8 *\r
+GetVariableDataPtr (\r
+ IN VARIABLE_HEADER *Variable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ This code gets the pointer to the variable data.\r
+\r
+Arguments:\r
+\r
+ Variable Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+ UINT8* Pointer to Variable Data\r
+\r
+--*/\r
+{\r
+ UINTN Value;\r
+ \r
+ //\r
+ // Be careful about pad size for alignment\r
+ //\r
+ Value = (UINTN) GetVariableNamePtr (Variable);\r
+ Value += NameSizeOfVariable (Variable);\r
+ Value += GET_PAD_SIZE (NameSizeOfVariable (Variable));\r
+\r
+ return (UINT8 *) Value;\r
+}\r
+\r
+VARIABLE_HEADER *\r
+GetNextVariablePtr (\r
+ IN VARIABLE_HEADER *Variable\r
+ )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+ This code gets the pointer to the next variable header.\r
+\r
+Arguments:\r
+\r
+ Variable Pointer to the Variable Header.\r
+\r
+Returns:\r
+\r
+ VARIABLE_HEADER* Pointer to next variable header.\r
+\r
+--*/\r
+{\r
+ UINTN Value;\r
+\r
+ if (!IsValidVariableHeader (Variable)) {\r
+ return NULL;\r
+ }\r
+\r
+ Value = (UINTN) GetVariableDataPtr (Variable);\r
+ Value += DataSizeOfVariable (Variable);\r
+ Value += GET_PAD_SIZE (DataSizeOfVariable (Variable));\r
+\r
+ //\r
+ // Be careful about pad size for alignment\r
+ //\r
+ return (VARIABLE_HEADER *) HEADER_ALIGN (Value);\r
+}\r
+\r
+\r