]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
Sync in bug fix from EDK I:
[mirror_edk2.git] / MdeModulePkg / Universal / SetupBrowserDxe / Setup.c
index 29b606fdeff06b5112641ea3068ebd5a643d0b39..847679fce5d3f01631ef23b2558d7022453b8881 100644 (file)
@@ -58,6 +58,7 @@ CHAR16            *gFunctionNineString;
 CHAR16            *gFunctionTenString;\r
 CHAR16            *gEnterString;\r
 CHAR16            *gEnterCommitString;\r
+CHAR16            *gEnterEscapeString;\r
 CHAR16            *gEscapeString;\r
 CHAR16            *gSaveFailed;\r
 CHAR16            *gMoveHighlight;\r
@@ -81,6 +82,7 @@ CHAR16            *gPlusString;
 CHAR16            *gMinusString;\r
 CHAR16            *gAdjustNumber;\r
 CHAR16            *gSaveChanges;\r
+CHAR16            *gOptionMismatch;\r
 \r
 CHAR16            gPromptBlockWidth;\r
 CHAR16            gOptionBlockWidth;\r
@@ -1050,6 +1052,7 @@ GetQuestionValue (
   CHAR16              *Progress;\r
   CHAR16              *Result;\r
   CHAR16              *Value;\r
+  CHAR16              *StringPtr;\r
   UINTN               Length;\r
   BOOLEAN             IsBufferStorage;\r
   BOOLEAN             IsString;\r
@@ -1245,6 +1248,16 @@ GetQuestionValue (
     // Skip '=', point to value\r
     //\r
     Value = Value + 1;\r
+\r
+    //\r
+    // Suppress <AltResp> if any\r
+    //\r
+    StringPtr = Value;\r
+    while (*StringPtr != L'\0' && *StringPtr != L'&') {\r
+      StringPtr++;\r
+    }\r
+    *StringPtr = L'\0';\r
+\r
     if (!IsBufferStorage && IsString) {\r
       //\r
       // Convert Config String to Unicode String, e.g "0041004200430044" => "ABCD"\r
@@ -1895,6 +1908,16 @@ ExtractFormDefault (
     Question = FORM_BROWSER_STATEMENT_FROM_LINK (Link);\r
     Link = GetNextNode (&Form->StatementListHead, Link);\r
 \r
+    //\r
+    // If Question is suppressed, don't reset it to default\r
+    //\r
+    if (Question->SuppressExpression != NULL) {\r
+      Status = EvaluateExpression (FormSet, Form, Question->SuppressExpression);\r
+      if (!EFI_ERROR (Status) && Question->SuppressExpression->Result.Value.b) {\r
+        continue;\r
+      }\r
+    }\r
+\r
     //\r
     // Reset Question to its default value\r
     //\r
@@ -2146,7 +2169,7 @@ GetIfrBinaryData (
     Package = ((UINT8 *) HiiPackageList) + Offset;\r
     CopyMem (&PackageHeader, Package, sizeof (EFI_HII_PACKAGE_HEADER));\r
 \r
-    if (PackageHeader.Type == EFI_HII_PACKAGE_FORM) {\r
+    if (PackageHeader.Type == EFI_HII_PACKAGE_FORMS) {\r
       //\r
       // Search FormSet in this Form Package\r
       //\r