return EFI_SUCCESS;
}
-EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, const char16_t *name, void **ret_data, size_t *ret_size) {
+EFI_STATUS efivar_get_raw_full(
+ const EFI_GUID *vendor,
+ const char16_t *name,
+ uint32_t *ret_attributes,
+ void **ret_data,
+ size_t *ret_size) {
+
EFI_STATUS err;
assert(vendor);
if (err != EFI_BUFFER_TOO_SMALL)
return err;
+ uint32_t attributes = 0;
_cleanup_free_ void *buf = xmalloc(size);
- err = RT->GetVariable((char16_t *) name, (EFI_GUID *) vendor, NULL, &size, buf);
+ err = RT->GetVariable((char16_t *) name, (EFI_GUID *) vendor, ret_attributes ? &attributes : NULL, &size, buf);
if (err != EFI_SUCCESS)
return err;
+ if (ret_attributes)
+ *ret_attributes = attributes;
if (ret_data)
*ret_data = TAKE_PTR(buf);
if (ret_size)
EFI_STATUS efivar_unset(const EFI_GUID *vendor, const char16_t *name, uint32_t flags);
EFI_STATUS efivar_get_str16(const EFI_GUID *vendor, const char16_t *name, char16_t **ret);
-EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, const char16_t *name, void **ret_data, size_t *ret_size);
+EFI_STATUS efivar_get_raw_full(const EFI_GUID *vendor, const char16_t *name, uint32_t *ret_attributes, void **ret_data, size_t *ret_size);
+static inline EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, const char16_t *name, void **ret_data, size_t *ret_size) {
+ return efivar_get_raw_full(vendor, name, NULL, ret_data, ret_size);
+}
EFI_STATUS efivar_get_uint64_str16(const EFI_GUID *vendor, const char16_t *name, uint64_t *ret);
EFI_STATUS efivar_get_uint32_le(const EFI_GUID *vendor, const char16_t *name, uint32_t *ret);
EFI_STATUS efivar_get_uint64_le(const EFI_GUID *vendor, const char16_t *name, uint64_t *ret);