/** This code gets the pointer to the next variable header. @param StoreInfo Pointer to variable store info structure. @param Variable Pointer to the Variable Header. @param VariableHeader Pointer to the Variable Header that has consecutive content. @return A VARIABLE_HEADER* pointer to next variable header. **/ VARIABLE_HEADER * GetNextVariablePtr ( IN VARIABLE_STORE_INFO *StoreInfo, IN VARIABLE_HEADER *Variable, IN VARIABLE_HEADER *VariableHeader ) { EFI_PHYSICAL_ADDRESS TargetAddress; EFI_PHYSICAL_ADDRESS SpareAddress; UINTN Value; Value = (UINTN) GetVariableDataPtr (Variable, VariableHeader, StoreInfo->AuthFlag); Value += DataSizeOfVariable (VariableHeader, StoreInfo->AuthFlag); Value += GET_PAD_SIZE (DataSizeOfVariable (VariableHeader, StoreInfo->AuthFlag)); // // Be careful about pad size for alignment // Value = HEADER_ALIGN (Value); if (StoreInfo->FtwLastWriteData != NULL) { TargetAddress = StoreInfo->FtwLastWriteData->TargetAddress; SpareAddress = StoreInfo->FtwLastWriteData->SpareAddress; if (((UINTN) Variable < (UINTN) TargetAddress) && (Value >= (UINTN) TargetAddress)) { // // Next variable is in spare block. // Value = (UINTN) SpareAddress + (Value - (UINTN) TargetAddress); } } return (VARIABLE_HEADER *) Value; }
/** This code gets the pointer to the variable data. @param Variable Pointer to the Variable Header. @return A UINT8* pointer to Variable Data. **/ UINT8 * GetVariableDataPtr ( IN VARIABLE_HEADER *Variable ) { UINTN Value; // // Be careful about pad size for alignment // Value = (UINTN) GetVariableNamePtr (Variable); Value += NameSizeOfVariable (Variable); Value += GET_PAD_SIZE (NameSizeOfVariable (Variable)); return (UINT8 *) Value; }
/** This code gets the pointer to the next variable header. @param Variable Pointer to the Variable Header. @return A VARIABLE_HEADER* pointer to next variable header. **/ VARIABLE_HEADER * GetNextVariablePtr ( IN VARIABLE_HEADER *Variable ) { UINTN Value; if (!IsValidVariableHeader (Variable)) { return NULL; } Value = (UINTN) GetVariableDataPtr (Variable); Value += DataSizeOfVariable (Variable); Value += GET_PAD_SIZE (DataSizeOfVariable (Variable)); // // Be careful about pad size for alignment // return (VARIABLE_HEADER *) HEADER_ALIGN (Value); }