From 031877d8bb49caa8e3ed5bae8867c963f033eb0c Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Wed, 26 Jan 2000 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2000-01-26 --- ip/devip.c | 21 ++++++++++++++++----- ip/ipifc.c | 4 ++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/ip/devip.c b/ip/devip.c index d5bc2a10e07973d686474e3d7b93162429be32f5..cfb03eddbb024a70ba3dd465123b4bc574a1de5e 100644 --- a/ip/devip.c +++ b/ip/devip.c @@ -127,6 +127,10 @@ ip1gen(Chan *c, int i, Dir *dp) Qid q; char *p; int prot; + int len = 0; + Fs *f; + + f = ipfs[c->dev]; prot = 0666; switch(i) { @@ -143,6 +147,7 @@ ip1gen(Chan *c, int i, Dir *dp) case Qndb: p = "ndb"; q = (Qid){QID(0, 0, Qndb), 0}; + len = strlen(f->ndb); break; case Qiproute: p = "iproute"; @@ -162,7 +167,7 @@ ip1gen(Chan *c, int i, Dir *dp) q = (Qid){QID(0, 0, Qlog), 0}; break; } - devdir(c, q, p, 0, network, prot, dp); + devdir(c, q, p, len, network, prot, dp); return 1; } @@ -350,6 +355,12 @@ ipopen(Chan* c, int omode) switch(TYPE(c->qid)) { default: break; + case Qndb: + if(omode & (OWRITE|OTRUNC) && !iseve()) + error(Eperm); + if((omode & (OWRITE|OTRUNC)) == (OWRITE|OTRUNC)) + f->ndb[0] = 0; + break; case Qlog: netlogopen(f); break; @@ -1220,11 +1231,11 @@ Fsnewcall(Conv *c, uchar *raddr, ushort rport, uchar *laddr, ushort lport) long ndbwrite(Fs *f, char *a, ulong off, int n) { - if(off != 0) + if(off > strlen(f->ndb)) error(Eio); - if(n >= sizeof(f->ndb)) + if(off+n >= sizeof(f->ndb)) error(Eio); - memmove(f->ndb, a, n); - f->ndb[n] = 0; + memmove(f->ndb+off, a, n); + f->ndb[off+n] = 0; return n; } diff --git a/ip/ipifc.c b/ip/ipifc.c index 21d4c830d8392d703029743847def44efa564496..0607e4673c76e6679756fb4343bce9dcf8018419 100644 --- a/ip/ipifc.c +++ b/ip/ipifc.c @@ -10,14 +10,14 @@ #define DPRINT if(0)print enum { - Maxmedia = 16, + Maxmedia = 32, Nself = Maxmedia*5, NHASH = (1<<6), NCACHE = 256, QMAX = 64*1024-1, }; -Medium *media[32] = +Medium *media[Maxmedia] = { 0 };