diff options
Diffstat (limited to 'src/libfs/write.c')
-rw-r--r-- | src/libfs/write.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/libfs/write.c b/src/libfs/write.c index 5652b491..bae2083e 100644 --- a/src/libfs/write.c +++ b/src/libfs/write.c @@ -7,8 +7,8 @@ #include <fs.h> #include "fsimpl.h" -long -fspwrite(Fid *fid, void *buf, long n, vlong offset) +static long +_fspwrite(Fid *fid, void *buf, long n, vlong offset) { Fcall tx, rx; void *freep; @@ -40,6 +40,31 @@ fspwrite(Fid *fid, void *buf, long n, vlong offset) } long +fspwrite(Fid *fid, void *buf, long n, vlong offset) +{ + long tot, want, got; + uint msize; + + msize = fid->fs->msize - IOHDRSZ; + tot = 0; + while(tot < n){ + want = n - tot; + if(want > msize) + want = msize; + got = _fspwrite(fid, buf, want, offset); + if(got < 0){ + if(tot == 0) + return got; + break; + } + tot += got; + if(offset != -1) + offset += got; + } + return tot; +} + +long fswrite(Fid *fid, void *buf, long n) { return fspwrite(fid, buf, n, -1); |