From 5a8e63b2f016735364d17866d5e2bcb35d20c78b Mon Sep 17 00:00:00 2001 From: rsc Date: Sun, 29 Feb 2004 22:10:26 +0000 Subject: Fighting the good fight. Move libfmt, libutf into subdirectories of lib9. Add poll-based socket i/o to libthread, so that we can avoid using multiple procs when possible, thus removing dependence on crappy pthreads implementations. Convert samterm, acme to the single-proc libthread. Bring libcomplete, acme up-to-date w.r.t. Plan 9 distribution. --- src/libfs/write.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'src/libfs/write.c') 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 #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; @@ -39,6 +39,31 @@ fspwrite(Fid *fid, void *buf, long n, vlong offset) return rx.count; } +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) { -- cgit v1.2.3