summaryrefslogtreecommitdiffstats
path: root/MdePkg/Library/PeiExtractGuidedSectionLib
diff options
context:
space:
mode:
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2007-10-19 09:11:42 +0000
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2007-10-19 09:11:42 +0000
commite2701217a1fa4f5edef14a870e8ed75474d45f04 (patch)
treeafea694d30a815c7ee63719a0b09d401743131d4 /MdePkg/Library/PeiExtractGuidedSectionLib
parentaa09397b3c62c7b409135ed91edef8bd7bd33a73 (diff)
downloadedk2-e2701217a1fa4f5edef14a870e8ed75474d45f04.tar.gz
edk2-e2701217a1fa4f5edef14a870e8ed75474d45f04.tar.bz2
edk2-e2701217a1fa4f5edef14a870e8ed75474d45f04.zip
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
Diffstat (limited to 'MdePkg/Library/PeiExtractGuidedSectionLib')
-rw-r--r--MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.c b/MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.c
index bbe6b50872..ce42a5dcd2 100644
--- a/MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.c
+++ b/MdePkg/Library/PeiExtractGuidedSectionLib/PeiExtractGuidedSectionLib.c
@@ -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.
//