return EFI_SUCCESS;
}
-EFI_STATUS file_read(
- EFI_FILE *dir,
- const char16_t *name,
+EFI_STATUS file_handle_read(
+ EFI_FILE *handle,
uint64_t offset,
size_t size,
char **ret,
size_t *ret_size) {
- _cleanup_(file_closep) EFI_FILE *handle = NULL;
_cleanup_free_ char *buf = NULL;
EFI_STATUS err;
- assert(dir);
- assert(name);
+ assert(handle);
assert(ret);
- err = dir->Open(dir, &handle, (char16_t*) name, EFI_FILE_MODE_READ, 0ULL);
- if (err != EFI_SUCCESS)
- return err;
-
if (size == 0) {
_cleanup_free_ EFI_FILE_INFO *info = NULL;
return err;
}
+EFI_STATUS file_read(
+ EFI_FILE *dir,
+ const char16_t *name,
+ uint64_t offset,
+ size_t size,
+ char **ret,
+ size_t *ret_size) {
+
+ EFI_STATUS err;
+
+ assert(dir);
+ assert(name);
+ assert(ret);
+
+ _cleanup_(file_closep) EFI_FILE *handle = NULL;
+ err = dir->Open(dir, &handle, (char16_t*) name, EFI_FILE_MODE_READ, 0ULL);
+ if (err != EFI_SUCCESS)
+ return err;
+
+ return file_handle_read(handle, offset, size, ret, ret_size);
+}
+
void print_at(size_t x, size_t y, size_t attr, const char16_t *str) {
assert(str);
ST->ConOut->SetCursorPosition(ST->ConOut, x, y);
EFI_STATUS chunked_read(EFI_FILE *file, size_t *size, void *buf);
EFI_STATUS file_read(EFI_FILE *dir, const char16_t *name, uint64_t offset, size_t size, char **content, size_t *content_size);
+EFI_STATUS file_handle_read(EFI_FILE *handle, uint64_t offset, size_t size, char **ret, size_t *ret_size);
static inline void file_closep(EFI_FILE **handle) {
if (!*handle)