diff options
| -rw-r--r-- | sys/boot/efi/libefi/efifs.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/sys/boot/efi/libefi/efifs.c b/sys/boot/efi/libefi/efifs.c index 6bd2452604dd..cb3fadc0652d 100644 --- a/sys/boot/efi/libefi/efifs.c +++ b/sys/boot/efi/libefi/efifs.c @@ -113,12 +113,23 @@ efifs_read(struct open_file *f, void *buf, size_t size, size_t *resid) EFI_FILE *file = f->f_fsdata; EFI_STATUS status; UINTN sz = size; + char *bufp; - status = file->Read(file, &sz, buf); - if (EFI_ERROR(status)) - return EIO; - - *resid = size - sz; + bufp = buf; + while (size > 0) { + sz = size; + if (sz > 8192) + sz = 8192; + status = file->Read(file, &sz, bufp); + twiddle(); + if (EFI_ERROR(status)) + return EIO; + if (sz == 0) + break; + size -= sz; + bufp += sz; + } + *resid = size; return 0; } |
