Update ExtractGuidedSectionLib instance to cover the same handler is registered multi times, the later will override the pre setting.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4183 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
lgao4 2007-10-19 09:11:42 +00:00
parent aa09397b3c
commit e2701217a1
2 changed files with 40 additions and 0 deletions

View File

@ -114,12 +114,32 @@ ExtractGuidedSectionRegisterHandlers (
IN EXTRACT_GUIDED_SECTION_DECODE_HANDLER DecodeHandler
)
{
UINT32 Index;
//
// Check input paramter.
//
if (SectionGuid == NULL) {
return RETURN_INVALID_PARAMETER;
}
//
// Search the match registered GetInfo handler for the input guided section.
//
for (Index = 0; Index < mNumberOfExtractHandler; Index ++) {
if (CompareGuid (&mExtractHandlerGuidTable[Index], SectionGuid)) {
break;
}
}
//
// If the guided handler has been registered before, only update its handler.
//
if (Index < mNumberOfExtractHandler) {
mExtractDecodeHandlerTable [Index] = DecodeHandler;
mExtractGetInfoHandlerTable [Index] = GetInfoHandler;
return RETURN_SUCCESS;
}
//
// Check the global table is enough to contain new Handler.
//

View File

@ -151,6 +151,7 @@ ExtractGuidedSectionRegisterHandlers (
)
{
EFI_STATUS Status;
UINT32 Index;
PEI_EXTRACT_GUIDED_SECTION_HANDLER_INFO *HandlerInfo;
//
@ -167,6 +168,25 @@ ExtractGuidedSectionRegisterHandlers (
if (EFI_ERROR (Status)) {
return Status;
}
//
// Search the match registered GetInfo handler for the input guided section.
//
for (Index = 0; Index < HandlerInfo->NumberOfExtractHandler; Index ++) {
if (CompareGuid (&(HandlerInfo->ExtractHandlerGuidTable[Index]), SectionGuid)) {
break;
}
}
//
// If the guided handler has been registered before, only update its handler.
//
if (Index < HandlerInfo->NumberOfExtractHandler) {
HandlerInfo->ExtractDecodeHandlerTable [Index] = DecodeHandler;
HandlerInfo->ExtractGetInfoHandlerTable [Index] = GetInfoHandler;
return RETURN_SUCCESS;
}
//
// Check the global table is enough to contain new Handler.
//