efi: beef up efivar_get_xyz() to accept NULL return values
This commit is contained in:
parent
5d87589732
commit
b9e452423c
|
@ -117,6 +117,9 @@ EFI_STATUS efivar_get(const CHAR16 *name, CHAR16 **value) {
|
|||
if ((size % 2) != 0)
|
||||
return EFI_INVALID_PARAMETER;
|
||||
|
||||
if (!value)
|
||||
return EFI_SUCCESS;
|
||||
|
||||
/* Return buffer directly if it happens to be NUL terminated already */
|
||||
if (size >= 2 && buf[size-2] == 0 && buf[size-1] == 0) {
|
||||
*value = (CHAR16*) buf;
|
||||
|
@ -141,7 +144,7 @@ EFI_STATUS efivar_get_int(const CHAR16 *name, UINTN *i) {
|
|||
EFI_STATUS err;
|
||||
|
||||
err = efivar_get(name, &val);
|
||||
if (!EFI_ERROR(err))
|
||||
if (!EFI_ERROR(err) && i)
|
||||
*i = Atoi(val);
|
||||
|
||||
return err;
|
||||
|
@ -159,8 +162,10 @@ EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, const CHAR16 *name, CHAR8 **bu
|
|||
|
||||
err = uefi_call_wrapper(RT->GetVariable, 5, (CHAR16*) name, (EFI_GUID *)vendor, NULL, &l, buf);
|
||||
if (!EFI_ERROR(err)) {
|
||||
*buffer = buf;
|
||||
buf = NULL;
|
||||
|
||||
if (buffer)
|
||||
*buffer = TAKE_PTR(buf);
|
||||
|
||||
if (size)
|
||||
*size = l;
|
||||
}
|
||||
|
|
|
@ -55,3 +55,10 @@ const EFI_GUID loader_guid;
|
|||
|
||||
#define UINTN_MAX (~(UINTN)0)
|
||||
#define INTN_MAX ((INTN)(UINTN_MAX>>1))
|
||||
|
||||
#define TAKE_PTR(ptr) \
|
||||
({ \
|
||||
typeof(ptr) _ptr_ = (ptr); \
|
||||
(ptr) = NULL; \
|
||||
_ptr_; \
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue