From 894fe673b4f1326abd29512c8419759698d8ea2c Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Thu, 22 May 2014 18:10:49 -0700 Subject: Support mmapping files whose length is not divisible by pgsize --- pk/vm.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'pk') diff --git a/pk/vm.c b/pk/vm.c index 768a9b3..6922b29 100644 --- a/pk/vm.c +++ b/pk/vm.c @@ -177,9 +177,10 @@ static int __handle_page_fault(uintptr_t vaddr, int prot) if (v->file) { size_t flen = MIN(RISCV_PGSIZE, v->length - (vaddr - v->addr)); - kassert(flen == file_pread(v->file, (void*)vaddr, flen, vaddr - v->addr + v->offset)); - if (flen < RISCV_PGSIZE) - memset((void*)vaddr + flen, 0, RISCV_PGSIZE - flen); + ssize_t ret = file_pread(v->file, (void*)vaddr, flen, vaddr - v->addr + v->offset); + kassert(ret > 0); + if (ret < RISCV_PGSIZE) + memset((void*)vaddr + ret, 0, RISCV_PGSIZE - ret); } else memset((void*)vaddr, 0, RISCV_PGSIZE); -- cgit v1.1