]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdePkg/UefiLib: Add a new API GetVariable3
authorBret Barkelew <brbarkel@microsoft.com>
Fri, 4 Jan 2019 02:22:12 +0000 (10:22 +0800)
committerLiming Gao <liming.gao@intel.com>
Thu, 31 Jan 2019 12:19:24 +0000 (20:19 +0800)
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=1396
Add a new API GetVariable3, which can return the attributes of a variable during reading it.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Jiansong Xu <jiansongx.xu@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
MdePkg/Include/Library/UefiLib.h
MdePkg/Library/UefiLib/UefiLib.c

index 08222d488bee72690fca07bfe08d3eb6d37a7bb3..7d97408eab2acd530648dc2e5142faa82d019f0f 100644 (file)
@@ -737,9 +737,9 @@ GetEfiGlobalVariable (
   @param[out] Value The buffer point saved the variable info.\r
   @param[out] Size  The buffer size of the variable.\r
 \r
-  @return EFI_OUT_OF_RESOURCES      Allocate buffer failed.\r
-  @return EFI_SUCCESS               Find the specified variable.\r
-  @return Others Errors             Return errors from call to gRT->GetVariable.\r
+  @retval EFI_OUT_OF_RESOURCES      Allocate buffer failed.\r
+  @retval EFI_SUCCESS               Find the specified variable.\r
+  @retval Others Errors             Return errors from call to gRT->GetVariable.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -765,9 +765,9 @@ GetVariable2 (
   @param[out] Value The buffer point saved the variable info.\r
   @param[out] Size  The buffer size of the variable.\r
 \r
-  @return EFI_OUT_OF_RESOURCES      Allocate buffer failed.\r
-  @return EFI_SUCCESS               Find the specified variable.\r
-  @return Others Errors             Return errors from call to gRT->GetVariable.\r
+  @retval EFI_OUT_OF_RESOURCES      Allocate buffer failed.\r
+  @retval EFI_SUCCESS               Find the specified variable.\r
+  @retval Others Errors             Return errors from call to gRT->GetVariable.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -778,6 +778,39 @@ GetEfiGlobalVariable2 (
   OUT UINTN          *Size OPTIONAL\r
   );\r
 \r
+/** Return the attributes of the variable.\r
+\r
+  Returns the status whether get the variable success. The function retrieves\r
+  variable  through the UEFI Runtime Service GetVariable().  The\r
+  returned buffer is allocated using AllocatePool().  The caller is responsible\r
+  for freeing this buffer with FreePool().  The attributes are returned if\r
+  the caller provides a valid Attribute parameter.\r
+\r
+  If Name  is NULL, then ASSERT().\r
+  If Guid  is NULL, then ASSERT().\r
+  If Value is NULL, then ASSERT().\r
+\r
+  @param[in]  Name  The pointer to a Null-terminated Unicode string.\r
+  @param[in]  Guid  The pointer to an EFI_GUID structure\r
+  @param[out] Value The buffer point saved the variable info.\r
+  @param[out] Size  The buffer size of the variable.\r
+  @param[out] Attr  The pointer to the variable attributes as found in var store\r
+\r
+  @retval EFI_OUT_OF_RESOURCES      Allocate buffer failed.\r
+  @retval EFI_SUCCESS               Find the specified variable.\r
+  @retval Others Errors             Return errors from call to gRT->GetVariable.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+GetVariable3(\r
+  IN CONST CHAR16       *Name,\r
+  IN CONST EFI_GUID     *Guid,\r
+     OUT VOID           **Value,\r
+     OUT UINTN          *Size OPTIONAL,\r
+     OUT UINT32         *Attr OPTIONAL\r
+  );\r
+\r
 /**\r
   Returns a pointer to an allocated buffer that contains the best matching language\r
   from a set of supported languages.\r
index 39d0ce2b21b34cf44f6b438e25ce8b051d22b2f3..475017690ce74fbdff7717f3bdae4daf8fa14344 100644 (file)
@@ -1439,6 +1439,87 @@ GetVariable2 (
   return Status;\r
 }\r
 \r
+/** Return the attributes of the variable.\r
+\r
+  Returns the status whether get the variable success. The function retrieves\r
+  variable  through the UEFI Runtime Service GetVariable().  The\r
+  returned buffer is allocated using AllocatePool().  The caller is responsible\r
+  for freeing this buffer with FreePool().  The attributes are returned if\r
+  the caller provides a valid Attribute parameter.\r
+\r
+  If Name  is NULL, then ASSERT().\r
+  If Guid  is NULL, then ASSERT().\r
+  If Value is NULL, then ASSERT().\r
+\r
+  @param[in]  Name  The pointer to a Null-terminated Unicode string.\r
+  @param[in]  Guid  The pointer to an EFI_GUID structure\r
+  @param[out] Value The buffer point saved the variable info.\r
+  @param[out] Size  The buffer size of the variable.\r
+  @param[out] Attr  The pointer to the variable attributes as found in var store\r
+\r
+  @retval EFI_OUT_OF_RESOURCES      Allocate buffer failed.\r
+  @retval EFI_SUCCESS               Find the specified variable.\r
+  @retval Others Errors             Return errors from call to gRT->GetVariable.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+GetVariable3(\r
+  IN CONST CHAR16       *Name,\r
+  IN CONST EFI_GUID     *Guid,\r
+     OUT VOID           **Value,\r
+     OUT UINTN          *Size OPTIONAL,\r
+     OUT UINT32         *Attr OPTIONAL\r
+  )\r
+{\r
+  EFI_STATUS  Status;\r
+  UINTN       BufferSize;\r
+\r
+  ASSERT(Name != NULL && Guid != NULL && Value != NULL);\r
+\r
+  //\r
+  // Try to get the variable size.\r
+  //\r
+  BufferSize = 0;\r
+  *Value = NULL;\r
+  if (Size != NULL) {\r
+    *Size = 0;\r
+  }\r
+\r
+  if (Attr != NULL) {\r
+    *Attr = 0;\r
+  }\r
+\r
+  Status = gRT->GetVariable((CHAR16 *)Name, (EFI_GUID *)Guid, Attr, &BufferSize, *Value);\r
+  if (Status != EFI_BUFFER_TOO_SMALL) {\r
+    return Status;\r
+  }\r
+\r
+  //\r
+  // Allocate buffer to get the variable.\r
+  //\r
+  *Value = AllocatePool(BufferSize);\r
+  ASSERT(*Value != NULL);\r
+  if (*Value == NULL) {\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
+\r
+  //\r
+  // Get the variable data.\r
+  //\r
+  Status = gRT->GetVariable((CHAR16 *)Name, (EFI_GUID *)Guid, Attr, &BufferSize, *Value);\r
+  if (EFI_ERROR(Status)) {\r
+    FreePool(*Value);\r
+    *Value = NULL;\r
+  }\r
+\r
+  if (Size != NULL) {\r
+    *Size = BufferSize;\r
+  }\r
+\r
+  return Status;\r
+}\r
+\r
 /**\r
   Returns a pointer to an allocated buffer that contains the contents of a\r
   variable retrieved through the UEFI Runtime Service GetVariable().  This\r