diff options
| -rw-r--r-- | sys/src/cmd/acme/disk.c | 12 |
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"); } |
