Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <[email protected]>
---
 .../HiiDatabaseDxe/ConfigKeywordHandler.c          | 23 +++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c 
b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c
index ccd6f82..b978669 100644
--- a/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c
+++ b/MdeModulePkg/Universal/HiiDatabaseDxe/ConfigKeywordHandler.c
@@ -1338,12 +1338,11 @@ GetStringIdFromRecord (
     StringPackage = CR (Link, HII_STRING_PACKAGE_INSTANCE, StringEntry, 
HII_STRING_PACKAGE_SIGNATURE);
 
     if (AsciiStrnCmp(Name, StringPackage->StringPkgHdr->Language, AsciiStrLen 
(Name)) == 0) {
       Status = GetStringIdFromString (StringPackage, KeywordValue, StringId); 
       if (EFI_ERROR (Status)) {
-        RetVal = KEYWORD_HANDLER_KEYWORD_NOT_FOUND;
-        continue;
+        return KEYWORD_HANDLER_KEYWORD_NOT_FOUND;
       } else {
         if (*NameSpace == NULL) {
           *NameSpace = AllocateCopyPool (AsciiStrSize 
(StringPackage->StringPkgHdr->Language), StringPackage->StringPkgHdr->Language);
           if (*NameSpace == NULL) {
             return KEYWORD_HANDLER_UNDEFINED_PROCESSING_ERROR;
@@ -2554,20 +2553,22 @@ MergeToMultiKeywordResp (
 
   This is a internal function.
 
   @param  NameSpace                      The namespace used to search the 
string.
   @param  MultiResp                      Return the MultiKeywordResp string 
for the system.
+  @param  ProgressErr                    Return the error status.
 
   @retval EFI_OUT_OF_RESOURCES           The memory can't be allocated.
   @retval EFI_SUCCESS                    Generate the MultiKeywordResp string.
   @retval EFI_NOT_FOUND                  No keyword found.
 
 **/
 EFI_STATUS
 EnumerateAllKeywords (
   IN  CHAR8             *NameSpace,
-  OUT EFI_STRING        *MultiResp
+  OUT EFI_STRING        *MultiResp,
+  OUT UINT32            *ProgressErr
   )
 {
   LIST_ENTRY                          *Link;
   LIST_ENTRY                          *StringLink;
   UINT8                               *DevicePathPkg;
@@ -2583,19 +2584,21 @@ EnumerateAllKeywords (
   CHAR16                              *ValueElement;
   CHAR16                              *KeywordResp;
   CHAR16                              *MultiKeywordResp;
   CHAR16                              *KeywordData;
   BOOLEAN                             ReadOnly;
+  BOOLEAN                             FindKeywordPackages;
 
   DataBaseRecord   = NULL;
   Status           = EFI_SUCCESS;
   MultiKeywordResp = NULL;
   DevicePath       = NULL;
   LocalNameSpace   = NULL;
   ConfigRequest    = NULL;
   ValueElement     = NULL;
   KeywordResp      = NULL;
+  FindKeywordPackages = FALSE;
 
   if (NameSpace == NULL) {
     NameSpace = UEFI_CONFIG_LANG;
   }
 
@@ -2614,10 +2617,11 @@ EnumerateAllKeywords (
 
       //
       // Check whether has keyword string package.
       //
       if (AsciiStrnCmp(NameSpace, StringPackage->StringPkgHdr->Language, 
AsciiStrLen (NameSpace)) == 0) {
+        FindKeywordPackages = TRUE;
         //
         // Keep the NameSpace string.
         //
         LocalNameSpace = AllocateCopyPool (AsciiStrSize 
(StringPackage->StringPkgHdr->Language), StringPackage->StringPkgHdr->Language);
         if (LocalNameSpace == NULL) {
@@ -2716,10 +2720,15 @@ Error:
   //
   // return the already get MultiKeywordString even error occured.
   //
   if (MultiKeywordResp == NULL) {
     Status = EFI_NOT_FOUND;
+    if (!FindKeywordPackages) {
+      *ProgressErr = KEYWORD_HANDLER_NAMESPACE_ID_NOT_FOUND;
+    } else {
+      *ProgressErr = KEYWORD_HANDLER_KEYWORD_NOT_FOUND;
+    }
   } else {
     Status = EFI_SUCCESS;
   }
   *MultiResp = MultiKeywordResp;
   
@@ -2855,11 +2864,11 @@ EfiConfigKeywordHandlerSetData (
     ASSERT (NameSpace != NULL);
     //
     // 1.1 Check whether the input namespace is valid.
     //
     if (AsciiStrnCmp(NameSpace, UEFI_CONFIG_LANG, AsciiStrLen 
(UEFI_CONFIG_LANG)) != 0) {
-      *ProgressErr = KEYWORD_HANDLER_UNDEFINED_PROCESSING_ERROR;
+      *ProgressErr = KEYWORD_HANDLER_MALFORMED_STRING;
       Status = EFI_INVALID_PARAMETER;
       goto Done;
     }
 
     StringPtr = NextStringPtr;
@@ -3131,19 +3140,19 @@ EfiConfigKeywordHandlerGetData (
   if (TempString != NULL) {
     FreePool (TempString);
     TempString = NULL;
   }
   if (EFI_ERROR (Status)) {
-    *ProgressErr = KEYWORD_HANDLER_NAMESPACE_ID_NOT_FOUND;
+    *ProgressErr = KEYWORD_HANDLER_MALFORMED_STRING;
     return Status;
   }
   //
   // 1.1 Check whether the input namespace is valid.
   //
   if (NameSpace != NULL){
     if (AsciiStrnCmp(NameSpace, UEFI_CONFIG_LANG, AsciiStrLen 
(UEFI_CONFIG_LANG)) != 0) {
-      *ProgressErr = KEYWORD_HANDLER_UNDEFINED_PROCESSING_ERROR;
+      *ProgressErr = KEYWORD_HANDLER_MALFORMED_STRING;
       return EFI_INVALID_PARAMETER;
     }
   }
   
   if (KeywordString != NULL) {
@@ -3261,11 +3270,11 @@ EfiConfigKeywordHandlerGetData (
     }
   } else {
     //
     // Enumerate all keyword in the system.
     //
-    Status = EnumerateAllKeywords(NameSpace, &MultiKeywordResp);
+    Status = EnumerateAllKeywords(NameSpace, &MultiKeywordResp, ProgressErr);
     if (EFI_ERROR (Status)) {
       goto Done;
     }
     *Results = MultiKeywordResp;
   }
-- 
1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to