/** Get the default value for Buffer Type storage from the FormSet in ThunkContext. The results can be multiple instances of UEFI_IFR_BUFFER_STORAGE_NODE. They are inserted to the link list. @param ThunkContext Hii thunk context. @param UefiDefaults The head of link list for the output. @retval EFI_SUCCESS Successful. **/ EFI_STATUS UefiIfrGetBufferTypeDefaults ( IN HII_THUNK_CONTEXT *ThunkContext, OUT LIST_ENTRY **UefiDefaults ) { LIST_ENTRY *DefaultLink; FORMSET_DEFAULTSTORE *DefaultStore; EFI_STATUS Status; ASSERT (UefiDefaults != NULL); *UefiDefaults = AllocateZeroPool (sizeof (LIST_ENTRY)); ASSERT (*UefiDefaults != NULL); InitializeListHead (*UefiDefaults); DefaultLink = GetFirstNode (&ThunkContext->FormSet->DefaultStoreListHead); while (!IsNull (&ThunkContext->FormSet->DefaultStoreListHead, DefaultLink)) { DefaultStore = FORMSET_DEFAULTSTORE_FROM_LINK(DefaultLink); Status = GetBufferTypeDefaultId (DefaultStore, ThunkContext->FormSet, *UefiDefaults); ASSERT_EFI_ERROR (Status); DefaultLink = GetNextNode (&ThunkContext->FormSet->DefaultStoreListHead, DefaultLink); } return EFI_SUCCESS; }
/** Free resources allocated for a FormSet @param FormSet Pointer of the FormSet @return None. **/ VOID DestroyFormSet ( IN OUT FORM_BROWSER_FORMSET *FormSet ) { LIST_ENTRY *Link; FORMSET_STORAGE *Storage; FORMSET_DEFAULTSTORE *DefaultStore; FORM_BROWSER_FORM *Form; // // Free IFR binary buffer // FreePool (FormSet->IfrBinaryData); // // Free FormSet Storage // if (FormSet->StorageListHead.ForwardLink != NULL) { while (!IsListEmpty (&FormSet->StorageListHead)) { Link = GetFirstNode (&FormSet->StorageListHead); Storage = FORMSET_STORAGE_FROM_LINK (Link); RemoveEntryList (&Storage->Link); DestroyStorage (Storage); } } // // Free FormSet Default Store // if (FormSet->DefaultStoreListHead.ForwardLink != NULL) { while (!IsListEmpty (&FormSet->DefaultStoreListHead)) { Link = GetFirstNode (&FormSet->DefaultStoreListHead); DefaultStore = FORMSET_DEFAULTSTORE_FROM_LINK (Link); RemoveEntryList (&DefaultStore->Link); gBS->FreePool (DefaultStore); } } // // Free Forms // if (FormSet->FormListHead.ForwardLink != NULL) { while (!IsListEmpty (&FormSet->FormListHead)) { Link = GetFirstNode (&FormSet->FormListHead); Form = FORM_BROWSER_FORM_FROM_LINK (Link); RemoveEntryList (&Form->Link); DestroyForm (Form); } } if (FormSet->StatementBuffer != NULL) { FreePool (FormSet->StatementBuffer); } DestoryOneOfOptionMap (&FormSet->OneOfOptionMapListHead); if (FormSet->OriginalDefaultVarStoreName != NULL) { FreePool (FormSet->OriginalDefaultVarStoreName); } FreePool (FormSet); }