efi_loader: Clean up file size calculations

We recently added a common function for calculating file size,
instead of copy pasting the code around.  Switch one of the
occurences over to the common function

Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Reviwed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
Ilias Apalodimas 2021-03-25 21:55:16 +02:00 committed by Heinrich Schuchardt
parent 5e21958c02
commit ac30aad210

View file

@ -1876,7 +1876,6 @@ static
efi_status_t efi_load_image_from_file(struct efi_device_path *file_path, efi_status_t efi_load_image_from_file(struct efi_device_path *file_path,
void **buffer, efi_uintn_t *size) void **buffer, efi_uintn_t *size)
{ {
struct efi_file_info *info = NULL;
struct efi_file_handle *f; struct efi_file_handle *f;
efi_status_t ret; efi_status_t ret;
u64 addr; u64 addr;
@ -1887,18 +1886,7 @@ efi_status_t efi_load_image_from_file(struct efi_device_path *file_path,
if (!f) if (!f)
return EFI_NOT_FOUND; return EFI_NOT_FOUND;
/* Get file size */ ret = efi_file_size(f, &bs);
bs = 0;
EFI_CALL(ret = f->getinfo(f, (efi_guid_t *)&efi_file_info_guid,
&bs, info));
if (ret != EFI_BUFFER_TOO_SMALL) {
ret = EFI_DEVICE_ERROR;
goto error;
}
info = malloc(bs);
EFI_CALL(ret = f->getinfo(f, (efi_guid_t *)&efi_file_info_guid, &bs,
info));
if (ret != EFI_SUCCESS) if (ret != EFI_SUCCESS)
goto error; goto error;
@ -1908,7 +1896,6 @@ efi_status_t efi_load_image_from_file(struct efi_device_path *file_path,
* allocate a buffer as EFI_BOOT_SERVICES_DATA. The caller has to * allocate a buffer as EFI_BOOT_SERVICES_DATA. The caller has to
* update the reservation according to the image type. * update the reservation according to the image type.
*/ */
bs = info->file_size;
ret = efi_allocate_pages(EFI_ALLOCATE_ANY_PAGES, ret = efi_allocate_pages(EFI_ALLOCATE_ANY_PAGES,
EFI_BOOT_SERVICES_DATA, EFI_BOOT_SERVICES_DATA,
efi_size_in_pages(bs), &addr); efi_size_in_pages(bs), &addr);
@ -1925,7 +1912,6 @@ efi_status_t efi_load_image_from_file(struct efi_device_path *file_path,
*size = bs; *size = bs;
error: error:
EFI_CALL(f->close(f)); EFI_CALL(f->close(f));
free(info);
return ret; return ret;
} }