mirror of https://github.com/acidanthera/audk.git
When finish using the browser storage for one formset, browser should clean the ConfigRequest string for this formset.
Signed-off-by: Eric Dong <eric.dong@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@14380 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
164a9b6752
commit
0a6f8af50d
|
@ -367,6 +367,7 @@ SendForm (
|
||||||
// If no data is changed, don't need to save current FormSet into the maintain list.
|
// If no data is changed, don't need to save current FormSet into the maintain list.
|
||||||
//
|
//
|
||||||
if (!IsNvUpdateRequired (gOldFormSet)) {
|
if (!IsNvUpdateRequired (gOldFormSet)) {
|
||||||
|
CleanBrowserStorage(gOldFormSet);
|
||||||
RemoveEntryList (&gOldFormSet->Link);
|
RemoveEntryList (&gOldFormSet->Link);
|
||||||
DestroyFormSet (gOldFormSet);
|
DestroyFormSet (gOldFormSet);
|
||||||
}
|
}
|
||||||
|
@ -2215,6 +2216,7 @@ ValidateFormSet (
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Find) {
|
if (!Find) {
|
||||||
|
CleanBrowserStorage(FormSet);
|
||||||
RemoveEntryList (&FormSet->Link);
|
RemoveEntryList (&FormSet->Link);
|
||||||
DestroyFormSet (FormSet);
|
DestroyFormSet (FormSet);
|
||||||
}
|
}
|
||||||
|
@ -2340,6 +2342,7 @@ DiscardForm (
|
||||||
//
|
//
|
||||||
// Remove maintain backup list after discard except for the current using FormSet.
|
// Remove maintain backup list after discard except for the current using FormSet.
|
||||||
//
|
//
|
||||||
|
CleanBrowserStorage(LocalFormSet);
|
||||||
RemoveEntryList (&LocalFormSet->Link);
|
RemoveEntryList (&LocalFormSet->Link);
|
||||||
DestroyFormSet (LocalFormSet);
|
DestroyFormSet (LocalFormSet);
|
||||||
}
|
}
|
||||||
|
@ -2626,6 +2629,7 @@ SubmitForm (
|
||||||
//
|
//
|
||||||
// Remove maintain backup list after save except for the current using FormSet.
|
// Remove maintain backup list after save except for the current using FormSet.
|
||||||
//
|
//
|
||||||
|
CleanBrowserStorage(LocalFormSet);
|
||||||
RemoveEntryList (&LocalFormSet->Link);
|
RemoveEntryList (&LocalFormSet->Link);
|
||||||
DestroyFormSet (LocalFormSet);
|
DestroyFormSet (LocalFormSet);
|
||||||
}
|
}
|
||||||
|
@ -3436,6 +3440,150 @@ LoadFormSetConfig (
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Remove the Request element from the Config Request.
|
||||||
|
|
||||||
|
@param Storage Pointer to the browser storage.
|
||||||
|
@param RequestElement The pointer to the Request element.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
RemoveElement (
|
||||||
|
IN OUT BROWSER_STORAGE *Storage,
|
||||||
|
IN CHAR16 *RequestElement
|
||||||
|
)
|
||||||
|
{
|
||||||
|
CHAR16 *NewStr;
|
||||||
|
CHAR16 *DestStr;
|
||||||
|
|
||||||
|
ASSERT (Storage->ConfigRequest != NULL && RequestElement != NULL);
|
||||||
|
|
||||||
|
NewStr = StrStr (Storage->ConfigRequest, RequestElement);
|
||||||
|
|
||||||
|
if (NewStr == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Remove this element from this ConfigRequest.
|
||||||
|
//
|
||||||
|
DestStr = NewStr;
|
||||||
|
NewStr += StrLen (RequestElement);
|
||||||
|
CopyMem (DestStr, NewStr, StrSize (NewStr));
|
||||||
|
|
||||||
|
Storage->SpareStrLen += StrLen (RequestElement);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Adjust config request in storage, remove the request elements existed in the input ConfigRequest.
|
||||||
|
|
||||||
|
@param Storage Pointer to the browser storage.
|
||||||
|
@param ConfigRequest The pointer to the Request element.
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
RemoveConfigRequest (
|
||||||
|
BROWSER_STORAGE *Storage,
|
||||||
|
CHAR16 *ConfigRequest
|
||||||
|
)
|
||||||
|
{
|
||||||
|
CHAR16 *RequestElement;
|
||||||
|
CHAR16 *NextRequestElement;
|
||||||
|
CHAR16 *SearchKey;
|
||||||
|
|
||||||
|
if (Storage->Type == EFI_HII_VARSTORE_NAME_VALUE) {
|
||||||
|
//
|
||||||
|
// "&Name1&Name2" section for EFI_HII_VARSTORE_NAME_VALUE storage
|
||||||
|
//
|
||||||
|
SearchKey = L"&";
|
||||||
|
} else {
|
||||||
|
//
|
||||||
|
// "&OFFSET=####&WIDTH=####" section for EFI_HII_VARSTORE_BUFFER storage
|
||||||
|
//
|
||||||
|
SearchKey = L"&OFFSET";
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Find SearchKey storage
|
||||||
|
//
|
||||||
|
if (Storage->Type == EFI_HII_VARSTORE_NAME_VALUE) {
|
||||||
|
RequestElement = StrStr (ConfigRequest, L"PATH");
|
||||||
|
ASSERT (RequestElement != NULL);
|
||||||
|
RequestElement = StrStr (RequestElement, SearchKey);
|
||||||
|
} else {
|
||||||
|
RequestElement = StrStr (ConfigRequest, SearchKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (RequestElement != NULL) {
|
||||||
|
//
|
||||||
|
// +1 to avoid find header itself.
|
||||||
|
//
|
||||||
|
NextRequestElement = StrStr (RequestElement + 1, SearchKey);
|
||||||
|
|
||||||
|
//
|
||||||
|
// The last Request element in configRequest string.
|
||||||
|
//
|
||||||
|
if (NextRequestElement != NULL) {
|
||||||
|
//
|
||||||
|
// Replace "&" with '\0'.
|
||||||
|
//
|
||||||
|
*NextRequestElement = L'\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
RemoveElement (Storage, RequestElement);
|
||||||
|
|
||||||
|
if (NextRequestElement != NULL) {
|
||||||
|
//
|
||||||
|
// Restore '&' with '\0' for later used.
|
||||||
|
//
|
||||||
|
*NextRequestElement = L'&';
|
||||||
|
}
|
||||||
|
|
||||||
|
RequestElement = NextRequestElement;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// If no request element remain, just remove the ConfigRequest string.
|
||||||
|
//
|
||||||
|
if (StrCmp (Storage->ConfigRequest, Storage->ConfigHdr) == 0) {
|
||||||
|
FreePool (Storage->ConfigRequest);
|
||||||
|
Storage->ConfigRequest = NULL;
|
||||||
|
Storage->SpareStrLen = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Base on the current formset info, clean the ConfigRequest string in browser storage.
|
||||||
|
|
||||||
|
@param FormSet Pointer of the FormSet
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
CleanBrowserStorage (
|
||||||
|
IN OUT FORM_BROWSER_FORMSET *FormSet
|
||||||
|
)
|
||||||
|
{
|
||||||
|
LIST_ENTRY *Link;
|
||||||
|
FORMSET_STORAGE *Storage;
|
||||||
|
|
||||||
|
Link = GetFirstNode (&FormSet->StorageListHead);
|
||||||
|
while (!IsNull (&FormSet->StorageListHead, Link)) {
|
||||||
|
Storage = FORMSET_STORAGE_FROM_LINK (Link);
|
||||||
|
Link = GetNextNode (&FormSet->StorageListHead, Link);
|
||||||
|
|
||||||
|
if ((Storage->BrowserStorage->Type != EFI_HII_VARSTORE_BUFFER) &&
|
||||||
|
(Storage->BrowserStorage->Type != EFI_HII_VARSTORE_NAME_VALUE)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Storage->ConfigRequest == NULL || Storage->BrowserStorage->ConfigRequest == NULL) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
RemoveConfigRequest (Storage->BrowserStorage, Storage->ConfigRequest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Check whether current element in the ConfigReqeust string.
|
Check whether current element in the ConfigReqeust string.
|
||||||
|
|
||||||
|
@ -3474,7 +3622,7 @@ AppendConfigRequest (
|
||||||
UINTN StringSize;
|
UINTN StringSize;
|
||||||
UINTN StrLength;
|
UINTN StrLength;
|
||||||
|
|
||||||
StrLength = StrLen (RequestElement) * sizeof (CHAR16);
|
StrLength = StrLen (RequestElement);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Append <RequestElement> to <ConfigRequest>
|
// Append <RequestElement> to <ConfigRequest>
|
||||||
|
|
|
@ -1544,4 +1544,15 @@ GetHotKeyFromRegisterList (
|
||||||
IN EFI_INPUT_KEY *KeyData
|
IN EFI_INPUT_KEY *KeyData
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Base on the current formset info, clean the ConfigRequest string in browser storage.
|
||||||
|
|
||||||
|
@param FormSet Pointer of the FormSet
|
||||||
|
|
||||||
|
**/
|
||||||
|
VOID
|
||||||
|
CleanBrowserStorage (
|
||||||
|
IN OUT FORM_BROWSER_FORMSET *FormSet
|
||||||
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue