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
\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
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
CHAR16 *MultiKeywordResp;\r
CHAR16 *KeywordData;\r
BOOLEAN ReadOnly;\r
+ BOOLEAN FindKeywordPackages;\r
\r
DataBaseRecord = NULL;\r
Status = EFI_SUCCESS;\r
ConfigRequest = NULL;\r
ValueElement = NULL;\r
KeywordResp = NULL;\r
+ FindKeywordPackages = FALSE;\r
\r
if (NameSpace == NULL) {\r
NameSpace = UEFI_CONFIG_LANG;\r
// 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
//\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
BOOLEAN ReadOnly;\r
EFI_STRING InternalProgress;\r
CHAR16 *TempString;\r
+ CHAR16 *KeywordStartPos;\r
\r
if (This == NULL || Progress == NULL || ProgressErr == NULL || KeywordString == NULL) {\r
return EFI_INVALID_PARAMETER;\r
KeywordData = NULL;\r
ValueElement = NULL;\r
ConfigResp = NULL;\r
+ KeywordStartPos = NULL;\r
KeywordStringId = 0;\r
\r
//\r
// 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
//\r
// 3. Extract keyword from the KeywordRequest string.\r
//\r
+ KeywordStartPos = StringPtr;\r
Status = ExtractKeyword(StringPtr, &KeywordData, &NextStringPtr);\r
if (EFI_ERROR (Status)) {\r
//\r
// 8. Check the readonly flag.\r
//\r
if (ExtractReadOnlyFromOpCode (OpCode) != ReadOnly) {\r
- *ProgressErr = KEYWORD_HANDLER_INCOMPATIBLE_VALUE_DETECTED;\r
- Status = EFI_INVALID_PARAMETER;\r
+ *ProgressErr = KEYWORD_HANDLER_ACCESS_NOT_PERMITTED;\r
+ Status = EFI_ACCESS_DENIED;\r
goto Done; \r
}\r
\r
FreePool (ConfigResp);\r
ConfigResp = NULL;\r
}\r
+ KeywordStartPos = NULL;\r
}\r
\r
//\r
*ProgressErr = KEYWORD_HANDLER_NO_ERROR;\r
\r
Done:\r
+ if (KeywordStartPos != NULL) {\r
+ *Progress = KeywordString + (KeywordStartPos - TempString);\r
+ } else {\r
+ *Progress = KeywordString + (StringPtr - TempString);\r
+ }\r
+\r
ASSERT (TempString != NULL);\r
FreePool (TempString);\r
if (NameSpace != NULL) {\r
}\r
if (MultiConfigResp != NULL && MultiConfigResp != ConfigResp) {\r
FreePool (MultiConfigResp);\r
- } \r
- *Progress = StringPtr;\r
+ }\r
+\r
return Status;\r
}\r
\r
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
//\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
//\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
*ProgressErr = KEYWORD_HANDLER_NO_ERROR;\r
\r
Done:\r
+ *Progress = KeywordString + (StringPtr - TempString);\r
+\r
if (TempString != NULL) {\r
FreePool (TempString);\r
}\r
if (KeywordData != NULL) {\r
FreePool (KeywordData);\r
}\r
- *Progress = StringPtr;\r
+\r
return Status;\r
}\r