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);
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);
}
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 */
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;
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);
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))
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);
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;
}
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