summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/cmd/acme/disk.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/sys/src/cmd/acme/disk.c b/sys/src/cmd/acme/disk.c
index 4c22d0a8c..9b76a5582 100644
--- a/sys/src/cmd/acme/disk.c
+++ b/sys/src/cmd/acme/disk.c
@@ -120,10 +120,20 @@ diskwrite(Disk *d, Block **bp, Rune *r, uint n)
void
diskread(Disk *d, Block *b, Rune *r, uint n)
{
+ int tot, nr;
+ char *p;
+
if(n > b->n)
error("internal error: diskread");
ntosize(b->n, nil);
- if(pread(d->fd, r, n*sizeof(Rune), b->addr) != n*sizeof(Rune))
+ n *= sizeof(Rune);
+ p = (char*)r;
+ for(tot = 0; tot < n; tot += nr){
+ nr = pread(d->fd, p+tot, n-tot, b->addr+tot);
+ if(nr <= 0)
+ error("read error from temp file");
+ }
+ if(tot != n)
error("read error from temp file");
}