For orderedlist question, the value is stored in a buffer,
not in HiiValue. So when need to get default value from callback
function for orderedlist, need to pass the buffer.
This patch is to enhance this logic.


Cc: Liming Gao <liming....@intel.com>
Cc: Eric Dong <eric.d...@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Dandan Bi <dandan...@intel.com>
---
 MdeModulePkg/Universal/SetupBrowserDxe/Setup.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c 
b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
index b357e29..c36588e 100644
--- a/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
+++ b/MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
@@ -3895,10 +3895,11 @@ GetQuestionDefault (
   EFI_STRING              StrValue;
   EFI_HII_CONFIG_ACCESS_PROTOCOL  *ConfigAccess;
   EFI_BROWSER_ACTION_REQUEST      ActionRequest;
   INTN                            Action;
   CHAR16                          *NewString;
+  EFI_IFR_TYPE_VALUE              *TypeValue;
 
   Status   = EFI_NOT_FOUND;
   StrValue = NULL;
 
   //
@@ -3915,10 +3916,17 @@ GetQuestionDefault (
   //  3, use nested EFI_IFR_DEFAULT 
   //  4, set flags of EFI_ONE_OF_OPTION (provide Standard and Manufacturing 
default)
   //  5, set flags of EFI_IFR_CHECKBOX (provide Standard and Manufacturing 
default) (lowest priority)
   //
   HiiValue = &Question->HiiValue;
+  TypeValue = &HiiValue->Value;
+  if (HiiValue->Type == EFI_IFR_TYPE_BUFFER && Question->BufferValue != NULL) {
+    //
+    // For orderedlist, need to pass the BufferValue to Callback function.
+    //
+    TypeValue = (EFI_IFR_TYPE_VALUE *) Question->BufferValue;
+  }
 
   //
   // Get Question defaut value from call back function.
   //
   ConfigAccess = FormSet->ConfigAccess;
@@ -3928,11 +3936,11 @@ GetQuestionDefault (
     Status = ConfigAccess->Callback (
                              ConfigAccess,
                              Action,
                              Question->QuestionId,
                              HiiValue->Type,
-                             &HiiValue->Value,
+                             TypeValue,
                              &ActionRequest
                              );
     if (!EFI_ERROR (Status)) {
       if (HiiValue->Type == EFI_IFR_TYPE_STRING) {
         NewString = GetToken (Question->HiiValue.Value.string, 
FormSet->HiiHandle);
-- 
1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to