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.
This commit is contained in:
parent
d51419bf43
commit
5a8e63b2f0
107 changed files with 665 additions and 6637 deletions
|
|
@ -5,6 +5,7 @@
|
|||
#include <libc.h>
|
||||
#include <fcall.h>
|
||||
#include <fs.h>
|
||||
#include <thread.h>
|
||||
#include "fsimpl.h"
|
||||
|
||||
static int _fssend(Mux*, void*);
|
||||
|
|
@ -270,7 +271,7 @@ _fsrecv(Mux *mux)
|
|||
Fsys *fs;
|
||||
|
||||
fs = mux->aux;
|
||||
n = readn(fs->fd, buf, 4);
|
||||
n = threadreadn(fs->fd, buf, 4);
|
||||
if(n != 4)
|
||||
return nil;
|
||||
n = GBIT32(buf);
|
||||
|
|
@ -280,12 +281,12 @@ _fsrecv(Mux *mux)
|
|||
return nil;
|
||||
}
|
||||
PBIT32(pkt, n);
|
||||
if(readn(fs->fd, pkt+4, n-4) != n-4){
|
||||
if(threadreadn(fs->fd, pkt+4, n-4) != n-4){
|
||||
free(pkt);
|
||||
return nil;
|
||||
}
|
||||
if(pkt[4] == Ropenfd){
|
||||
if((nfd=recvfd(fs->fd)) < 0){
|
||||
if((nfd=threadrecvfd(fs->fd)) < 0){
|
||||
fprint(2, "recv fd error: %r\n");
|
||||
free(pkt);
|
||||
return nil;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,12 @@ fspread(Fid *fid, void *buf, long n, vlong offset)
|
|||
{
|
||||
Fcall tx, rx;
|
||||
void *freep;
|
||||
uint msize;
|
||||
|
||||
msize = fid->fs->msize - IOHDRSZ;
|
||||
fprint(2, "n %d msize %d\n", n, msize);
|
||||
if(n > msize)
|
||||
n = msize;
|
||||
tx.type = Tread;
|
||||
tx.fid = fid->fid;
|
||||
if(offset == -1){
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue