+ NodeLink = GetFirstNode (&Storage->NameValueListHead);\r
+ while (!IsNull (&Storage->NameValueListHead, NodeLink)) {\r
+ TmpNode = NAME_VALUE_NODE_FROM_LINK (NodeLink);\r
+ NodeLink = GetNextNode (&Storage->NameValueListHead, NodeLink);\r
+ \r
+ if (StrCmp (Node->Name, TmpNode->Name) != 0) {\r
+ continue;\r
+ }\r
+\r
+ FreePool (TmpNode->EditValue);\r
+ TmpNode->EditValue = AllocateCopyPool (StrSize(Node->EditValue) * sizeof (CHAR16), Node->EditValue);\r
+\r
+ RemoveEntryList (&Node->Link);\r
+ FreePool (Node->EditValue);\r
+ FreePool (Node->Name);\r
+ FreePool (Node);\r
+ }\r
+ }\r
+\r
+ //\r
+ // Restore the Name/Value node.\r
+ // \r
+ Link = GetFirstNode (&BackUpList);\r
+ while (!IsNull (&BackUpList, Link)) {\r
+ Node = NAME_VALUE_NODE_FROM_LINK (Link);\r
+ Link = GetNextNode (&BackUpList, Link);\r
+ \r
+ //\r
+ // Free this node.\r
+ //\r
+ RemoveEntryList (&Node->Link);\r
+ FreePool (Node->EditValue);\r
+ FreePool (Node->Name);\r
+ FreePool (Node);\r
+ }\r
+ }\r
+}\r
+\r
+/**\r
+ Fill storage's edit copy with settings requested from Configuration Driver.\r
+\r
+ @param FormSet FormSet data structure.\r
+ @param Storage Buffer Storage.\r
+\r
+**/\r
+VOID\r
+LoadStorage (\r
+ IN FORM_BROWSER_FORMSET *FormSet,\r
+ IN FORMSET_STORAGE *Storage\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_STRING Progress;\r
+ EFI_STRING Result;\r
+ CHAR16 *StrPtr;\r
+ EFI_STRING ConfigRequest;\r
+ UINTN StrLen;\r
+\r
+ ConfigRequest = NULL;\r
+\r
+ switch (Storage->BrowserStorage->Type) {\r
+ case EFI_HII_VARSTORE_EFI_VARIABLE:\r
+ return;\r
+\r
+ case EFI_HII_VARSTORE_EFI_VARIABLE_BUFFER:\r
+ if (Storage->BrowserStorage->ConfigRequest != NULL) {\r
+ ConfigRequestAdjust(Storage);\r
+ return;\r
+ }\r
+\r
+ //\r
+ // Create the config request string to get all fields for this storage.\r
+ // Allocate and fill a buffer large enough to hold the <ConfigHdr> template\r
+ // followed by "&OFFSET=0&WIDTH=WWWW"followed by a Null-terminator\r
+ //\r
+ StrLen = StrSize (Storage->BrowserStorage->ConfigHdr) + 20 * sizeof (CHAR16);\r
+ ConfigRequest = AllocateZeroPool (StrLen);\r
+ ASSERT (ConfigRequest != NULL);\r
+ UnicodeSPrint (\r
+ ConfigRequest, \r
+ StrLen, \r
+ L"%s&OFFSET=0&WIDTH=%04x", \r
+ Storage->BrowserStorage->ConfigHdr,\r
+ Storage->BrowserStorage->Size);\r
+ break;\r
+\r
+ case EFI_HII_VARSTORE_BUFFER:\r
+ case EFI_HII_VARSTORE_NAME_VALUE:\r
+ //\r
+ // Skip if there is no RequestElement or data has initilized.\r
+ //\r
+ if (Storage->ElementCount == 0 || Storage->BrowserStorage->Initialized) {\r
+ return;\r
+ }\r
+ Storage->BrowserStorage->Initialized = TRUE;\r
+ ConfigRequest = Storage->ConfigRequest;\r
+ break;\r
+\r
+ default:\r
+ return;\r
+ }\r
+\r
+ //\r
+ // Request current settings from Configuration Driver\r
+ //\r
+ Status = mHiiConfigRouting->ExtractConfig (\r
+ mHiiConfigRouting,\r
+ ConfigRequest,\r
+ &Progress,\r
+ &Result\r
+ );\r
+\r
+ //\r
+ // If get value fail, extract default from IFR binary\r
+ //\r
+ if (EFI_ERROR (Status)) {\r
+ ExtractDefault (FormSet, NULL, EFI_HII_DEFAULT_CLASS_STANDARD, FormSetLevel, GetDefaultForStorage, Storage->BrowserStorage, TRUE);\r
+ } else {\r
+ //\r
+ // Convert Result from <ConfigAltResp> to <ConfigResp>\r
+ //\r
+ StrPtr = StrStr (Result, L"&GUID=");\r
+ if (StrPtr != NULL) {\r
+ *StrPtr = L'\0';\r