systemd-boot: Return EFI_STATUS instead of INTN for file_read()

file_read() wants to return both a EFI_STATUS (INTN) and a file
length (UINTN). This seems rather fishy for either large files or
when returning errors (which are defined as positive numbers).
Let's just be more clear and return EFI_STATUS and let the file
length be a pointer.
This commit is contained in:
Jan Janssen 2018-01-07 11:53:34 +01:00
parent 46659f7deb
commit 33d4ba32c9
4 changed files with 23 additions and 23 deletions

View file

@ -1142,11 +1142,10 @@ static VOID config_entry_add_from_file(Config *config, EFI_HANDLE *device, CHAR1
static VOID config_load_defaults(Config *config, EFI_FILE *root_dir) {
CHAR8 *content = NULL;
UINTN sec;
UINTN len;
EFI_STATUS err;
len = file_read(root_dir, L"\\loader\\loader.conf", 0, 0, &content);
if (len > 0)
err = file_read(root_dir, L"\\loader\\loader.conf", 0, 0, &content, NULL);
if (!EFI_ERROR(err))
config_defaults_load_from_file(config, content);
FreePool(content);
@ -1190,8 +1189,8 @@ static VOID config_load_entries(Config *config, EFI_HANDLE *device, EFI_FILE *ro
if (StrnCmp(f->FileName, L"auto-", 5) == 0)
continue;
len = file_read(entries_dir, f->FileName, 0, 0, &content);
if (len > 0)
err = file_read(entries_dir, f->FileName, 0, 0, &content, NULL);
if (!EFI_ERROR(err))
config_entry_add_from_file(config, device, f->FileName, content, loaded_image_path);
FreePool(content);
}
@ -1526,8 +1525,8 @@ static VOID config_entry_add_linux( Config *config, EFI_LOADED_IMAGE *loaded_ima
if (EFI_ERROR(err))
continue;
len = file_read(linux_dir, f->FileName, offs[0], szs[0], &content);
if (len <= 0)
err = file_read(linux_dir, f->FileName, offs[0], szs[0], &content, NULL);
if (EFI_ERROR(err))
continue;
/* read properties from the embedded os-release file */
@ -1568,9 +1567,10 @@ static VOID config_entry_add_linux( Config *config, EFI_LOADED_IMAGE *loaded_ima
entry = config_entry_add_loader(config, loaded_image->DeviceHandle, LOADER_LINUX, conf, 'l', os_name, path);
FreePool(content);
content = NULL;
/* read the embedded cmdline file */
len = file_read(linux_dir, f->FileName, offs[1], szs[1] - 1 , &content);
if (len > 0) {
err = file_read(linux_dir, f->FileName, offs[1], szs[1] - 1, &content, NULL);
if (!EFI_ERROR(err)) {
cmdline = stra_to_str(content);
entry->options = cmdline;
cmdline = NULL;

View file

@ -179,7 +179,10 @@ static EFIAPI EFI_STATUS security_policy_authentication (const EFI_SECURITY_PROT
dev_path_str = DevicePathToStr(dev_path);
FreePool(dev_path);
file_size = file_read(root, dev_path_str, 0, 0, &file_buffer);
status = file_read(root, dev_path_str, 0, 0, &file_buffer, &file_size);
if (EFI_ERROR(status))
return status;
FreePool(dev_path_str);
uefi_call_wrapper(root->Close, 1, root);

View file

@ -304,12 +304,10 @@ CHAR8 *strchra(CHAR8 *s, CHAR8 c) {
return NULL;
}
INTN file_read(EFI_FILE_HANDLE dir, CHAR16 *name, UINTN off, UINTN size, CHAR8 **content) {
EFI_STATUS file_read(EFI_FILE_HANDLE dir, CHAR16 *name, UINTN off, UINTN size, CHAR8 **content, UINTN *content_size) {
EFI_FILE_HANDLE handle;
CHAR8 *buf;
UINTN buflen;
EFI_STATUS err;
UINTN len;
err = uefi_call_wrapper(dir->Open, 5, dir, &handle, name, EFI_FILE_MODE_READ, 0ULL);
if (EFI_ERROR(err))
@ -319,10 +317,9 @@ INTN file_read(EFI_FILE_HANDLE dir, CHAR16 *name, UINTN off, UINTN size, CHAR8 *
EFI_FILE_INFO *info;
info = LibFileInfo(handle);
buflen = info->FileSize+1;
size = info->FileSize+1;
FreePool(info);
} else
buflen = size;
}
if (off > 0) {
err = uefi_call_wrapper(handle->SetPosition, 2, handle, off);
@ -330,17 +327,17 @@ INTN file_read(EFI_FILE_HANDLE dir, CHAR16 *name, UINTN off, UINTN size, CHAR8 *
return err;
}
buf = AllocatePool(buflen);
err = uefi_call_wrapper(handle->Read, 3, handle, &buflen, buf);
buf = AllocatePool(size);
err = uefi_call_wrapper(handle->Read, 3, handle, &size, buf);
if (!EFI_ERROR(err)) {
buf[buflen] = '\0';
buf[size] = '\0';
*content = buf;
len = buflen;
if (content_size)
*content_size = size;
} else {
len = err;
FreePool(buf);
}
uefi_call_wrapper(handle->Close, 1, handle);
return len;
return err;
}

View file

@ -45,5 +45,5 @@ CHAR8 *strchra(CHAR8 *s, CHAR8 c);
CHAR16 *stra_to_path(CHAR8 *stra);
CHAR16 *stra_to_str(CHAR8 *stra);
INTN file_read(EFI_FILE_HANDLE dir, CHAR16 *name, UINTN off, UINTN size, CHAR8 **content);
EFI_STATUS file_read(EFI_FILE_HANDLE dir, CHAR16 *name, UINTN off, UINTN size, CHAR8 **content, UINTN *content_size);
#endif