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:
rsc 2004-02-29 22:10:26 +00:00
parent d51419bf43
commit 5a8e63b2f0
107 changed files with 665 additions and 6637 deletions

View file

@ -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;

View file

@ -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){

View file

@ -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)
{