]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/HiiDatabase: Refine KeywordHandlerProtocol->GetData().
authorEric Dong <eric.dong@intel.com>
Thu, 17 Sep 2015 01:15:32 +0000 (01:15 +0000)
committerydong10 <ydong10@Edk2>
Thu, 17 Sep 2015 01:15:32 +0000 (01:15 +0000)
Update this function to follow UEFI spec requirement.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18489 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c

index ccd6f820c68e46e3332a352ddd624502d497aba4..b978669687145069b260d574051aa71fa1c09484 100644 (file)
@@ -1340,8 +1340,7 @@ GetStringIdFromRecord (
     if (AsciiStrnCmp(Name, StringPackage->StringPkgHdr->Language, AsciiStrLen (Name)) == 0) {\r
       Status = GetStringIdFromString (StringPackage, KeywordValue, StringId); \r
       if (EFI_ERROR (Status)) {\r
-        RetVal = KEYWORD_HANDLER_KEYWORD_NOT_FOUND;\r
-        continue;\r
+        return KEYWORD_HANDLER_KEYWORD_NOT_FOUND;\r
       } else {\r
         if (*NameSpace == NULL) {\r
           *NameSpace = AllocateCopyPool (AsciiStrSize (StringPackage->StringPkgHdr->Language), StringPackage->StringPkgHdr->Language);\r
@@ -2556,6 +2555,7 @@ MergeToMultiKeywordResp (
 \r
   @param  NameSpace                      The namespace used to search the string.\r
   @param  MultiResp                      Return the MultiKeywordResp string for the system.\r
+  @param  ProgressErr                    Return the error status.\r
 \r
   @retval EFI_OUT_OF_RESOURCES           The memory can't be allocated.\r
   @retval EFI_SUCCESS                    Generate the MultiKeywordResp string.\r
@@ -2565,7 +2565,8 @@ MergeToMultiKeywordResp (
 EFI_STATUS\r
 EnumerateAllKeywords (\r
   IN  CHAR8             *NameSpace,\r
-  OUT EFI_STRING        *MultiResp\r
+  OUT EFI_STRING        *MultiResp,\r
+  OUT UINT32            *ProgressErr\r
   )\r
 {\r
   LIST_ENTRY                          *Link;\r
@@ -2585,6 +2586,7 @@ EnumerateAllKeywords (
   CHAR16                              *MultiKeywordResp;\r
   CHAR16                              *KeywordData;\r
   BOOLEAN                             ReadOnly;\r
+  BOOLEAN                             FindKeywordPackages;\r
 \r
   DataBaseRecord   = NULL;\r
   Status           = EFI_SUCCESS;\r
@@ -2594,6 +2596,7 @@ EnumerateAllKeywords (
   ConfigRequest    = NULL;\r
   ValueElement     = NULL;\r
   KeywordResp      = NULL;\r
+  FindKeywordPackages = FALSE;\r
 \r
   if (NameSpace == NULL) {\r
     NameSpace = UEFI_CONFIG_LANG;\r
@@ -2616,6 +2619,7 @@ EnumerateAllKeywords (
       // Check whether has keyword string package.\r
       //\r
       if (AsciiStrnCmp(NameSpace, StringPackage->StringPkgHdr->Language, AsciiStrLen (NameSpace)) == 0) {\r
+        FindKeywordPackages = TRUE;\r
         //\r
         // Keep the NameSpace string.\r
         //\r
@@ -2718,6 +2722,11 @@ Error:
   //\r
   if (MultiKeywordResp == NULL) {\r
     Status = EFI_NOT_FOUND;\r
+    if (!FindKeywordPackages) {\r
+      *ProgressErr = KEYWORD_HANDLER_NAMESPACE_ID_NOT_FOUND;\r
+    } else {\r
+      *ProgressErr = KEYWORD_HANDLER_KEYWORD_NOT_FOUND;\r
+    }\r
   } else {\r
     Status = EFI_SUCCESS;\r
   }\r
@@ -2857,7 +2866,7 @@ EfiConfigKeywordHandlerSetData (
     // 1.1 Check whether the input namespace is valid.\r
     //\r
     if (AsciiStrnCmp(NameSpace, UEFI_CONFIG_LANG, AsciiStrLen (UEFI_CONFIG_LANG)) != 0) {\r
-      *ProgressErr = KEYWORD_HANDLER_UNDEFINED_PROCESSING_ERROR;\r
+      *ProgressErr = KEYWORD_HANDLER_MALFORMED_STRING;\r
       Status = EFI_INVALID_PARAMETER;\r
       goto Done;\r
     }\r
@@ -3133,7 +3142,7 @@ EfiConfigKeywordHandlerGetData (
     TempString = NULL;\r
   }\r
   if (EFI_ERROR (Status)) {\r
-    *ProgressErr = KEYWORD_HANDLER_NAMESPACE_ID_NOT_FOUND;\r
+    *ProgressErr = KEYWORD_HANDLER_MALFORMED_STRING;\r
     return Status;\r
   }\r
   //\r
@@ -3141,7 +3150,7 @@ EfiConfigKeywordHandlerGetData (
   //\r
   if (NameSpace != NULL){\r
     if (AsciiStrnCmp(NameSpace, UEFI_CONFIG_LANG, AsciiStrLen (UEFI_CONFIG_LANG)) != 0) {\r
-      *ProgressErr = KEYWORD_HANDLER_UNDEFINED_PROCESSING_ERROR;\r
+      *ProgressErr = KEYWORD_HANDLER_MALFORMED_STRING;\r
       return EFI_INVALID_PARAMETER;\r
     }\r
   }\r
@@ -3263,7 +3272,7 @@ EfiConfigKeywordHandlerGetData (
     //\r
     // Enumerate all keyword in the system.\r
     //\r
-    Status = EnumerateAllKeywords(NameSpace, &MultiKeywordResp);\r
+    Status = EnumerateAllKeywords(NameSpace, &MultiKeywordResp, ProgressErr);\r
     if (EFI_ERROR (Status)) {\r
       goto Done;\r
     }\r