mboxd_flash: Fix infinite loop on EOF
Change-Id: If3684d8c386dd41ce7f7a40353e55267e13d5b07
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
diff --git a/mboxd_flash.c b/mboxd_flash.c
index 606f63d..e8b147d 100644
--- a/mboxd_flash.c
+++ b/mboxd_flash.c
@@ -108,6 +108,8 @@
int copy_flash(struct mbox_context *context, uint32_t offset, void *mem,
uint32_t size)
{
+ int32_t size_read;
+
MSG_OUT("Loading flash at %p for 0x%08x bytes from offset 0x%.8x\n",
mem, size, offset);
if (lseek(context->fds[MTD_FD].fd, offset, SEEK_SET) != offset) {
@@ -116,8 +118,8 @@
return -MBOX_R_SYSTEM_ERROR;
}
- while (size) {
- uint32_t size_read = read(context->fds[MTD_FD].fd, mem,
+ do {
+ size_read = read(context->fds[MTD_FD].fd, mem,
min_u32(CHUNKSIZE, size));
if (size_read < 0) {
MSG_ERR("Couldn't copy mtd into ram: %d. %s\n",
@@ -127,9 +129,9 @@
size -= size_read;
mem += size_read;
- }
+ } while (size && size_read);
- return 0;
+ return size ? -MBOX_R_SYSTEM_ERROR : 0;
}
/*