]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/PlatformVarCleanupLib/PlatVarCleanupLib.c
MdeModulePkg: loose VA_COPY with no matching VA_END on a return path
[mirror_edk2.git] / MdeModulePkg / Library / PlatformVarCleanupLib / PlatVarCleanupLib.c
index d99174c4b962126e95ece2bd4d836c5aa9c3620c..450b4b344327990d81e2eb88382eddcab5186e72 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Sample platform variable cleanup library implementation.\r
 \r
-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -22,6 +22,8 @@ EDKII_VAR_CHECK_PROTOCOL    *mVarCheck = NULL;
 ///\r
 BOOLEAN                     mEndOfDxe = FALSE;\r
 \r
+EFI_EVENT                   mPlatVarCleanupLibEndOfDxeEvent = NULL;\r
+\r
 LIST_ENTRY                  mUserVariableList = INITIALIZE_LIST_HEAD_VARIABLE (mUserVariableList);\r
 UINT16                      mUserVariableCount = 0;\r
 UINT16                      mMarkedUserVariableCount = 0;\r
@@ -100,6 +102,15 @@ IsUserVariable (
   EFI_STATUS                    Status;\r
   VAR_CHECK_VARIABLE_PROPERTY   Property;\r
 \r
+  if (mVarCheck == NULL) {\r
+    gBS->LocateProtocol (\r
+           &gEdkiiVarCheckProtocolGuid,\r
+           NULL,\r
+           (VOID **) &mVarCheck\r
+           );\r
+  }\r
+  ASSERT (mVarCheck != NULL);\r
+\r
   ZeroMem (&Property, sizeof (Property));\r
   Status = mVarCheck->VariablePropertyGet (\r
                         Name,\r
@@ -917,7 +928,7 @@ VariableCleanupHiiCallback (
   }\r
 \r
   //\r
-  // Retrive uncommitted data from Form Browser.\r
+  // Retrieve uncommitted data from Form Browser.\r
   //\r
   VariableCleanupData = &Private->VariableCleanupData;\r
   HiiGetBrowserData (&mVariableCleanupHiiGuid, mVarStoreName, sizeof (VARIABLE_CLEANUP_DATA), (UINT8 *) VariableCleanupData);\r
@@ -1176,6 +1187,7 @@ Done:
 VAR_ERROR_FLAG\r
 EFIAPI\r
 GetLastBootVarErrorFlag (\r
+  VOID\r
   )\r
 {\r
   return mLastVarErrorFlag;\r
@@ -1220,18 +1232,10 @@ PlatformVarCleanupLibConstructor (
   )\r
 {\r
   EFI_STATUS    Status;\r
-  EFI_EVENT     Event;\r
 \r
   mLastVarErrorFlag = InternalGetVarErrorFlag ();\r
   DEBUG ((EFI_D_INFO, "mLastVarErrorFlag - 0x%02x\n", mLastVarErrorFlag));\r
 \r
-  Status = gBS->LocateProtocol (\r
-                  &gEdkiiVarCheckProtocolGuid,\r
-                  NULL,\r
-                  (VOID **) &mVarCheck\r
-                  );\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
   //\r
   // Register EFI_END_OF_DXE_EVENT_GROUP_GUID event.\r
   //\r
@@ -1241,10 +1245,36 @@ PlatformVarCleanupLibConstructor (
                   PlatformVarCleanupEndOfDxeEvent,\r
                   NULL,\r
                   &gEfiEndOfDxeEventGroupGuid,\r
-                  &Event\r
+                  &mPlatVarCleanupLibEndOfDxeEvent\r
                   );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  The destructor function closes the End of DXE event.\r
+\r
+  @param  ImageHandle   The firmware allocated handle for the EFI image.\r
+  @param  SystemTable   A pointer to the EFI System Table.\r
+\r
+  @retval EFI_SUCCESS   The destructor completed successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PlatformVarCleanupLibDestructor (\r
+  IN EFI_HANDLE         ImageHandle,\r
+  IN EFI_SYSTEM_TABLE   *SystemTable\r
+  )\r
+{\r
+  EFI_STATUS    Status;\r
+\r
+  //\r
+  // Close the End of DXE event.\r
+  //\r
+  Status = gBS->CloseEvent (mPlatVarCleanupLibEndOfDxeEvent);\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
+  return EFI_SUCCESS;\r
+}\r