From 4a444651c5992eb8372afffbb37eb57cc3585b8c Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Fri, 26 Jan 2018 11:34:32 +0100 Subject: [PATCH] gems: loop on partial reads in file util --- repos/gems/src/lib/file/file.cc | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/repos/gems/src/lib/file/file.cc b/repos/gems/src/lib/file/file.cc index f22c71659..249964669 100644 --- a/repos/gems/src/lib/file/file.cc +++ b/repos/gems/src/lib/file/file.cc @@ -43,10 +43,19 @@ File::File(char const *name, Genode::Allocator &alloc) { Libc::with_libc([&] () { int const fd = open(name, O_RDONLY); - if (read(fd, _data, _file_size) < 0) { - Genode::error("reading from file \"", name, "\" failed (error ", errno, ")"); - throw Reading_failed(); - } + + Genode::size_t remain = _file_size; + char *data = (char *)_data; + do { + int ret; + if ((ret = read(fd, data, remain)) < 0) { + Genode::error("reading from file \"", name, "\" failed (error ", errno, ")"); + throw Reading_failed(); + } + remain -= ret; + data += ret; + } while (remain > 0); + close(fd); }); }