diff options
| author | forsyth <forsyth@vitanuova.com> | 2009-08-25 19:29:15 +0100 |
|---|---|---|
| committer | forsyth <forsyth@vitanuova.com> | 2009-08-25 19:29:15 +0100 |
| commit | 67d4cb07c1a40a27872c4da282fbe1417aa87731 (patch) | |
| tree | 2fb0fc0bd3bf034357bcbfff147c0efc09ab539d /emu | |
| parent | 961f7d6c4c59cea370b706e4643853ab19193ffe (diff) | |
20090825-1929
Diffstat (limited to 'emu')
| -rw-r--r-- | emu/port/devcons.c | 38 | ||||
| -rw-r--r-- | emu/port/devtinyfs.c | 40 | ||||
| -rw-r--r-- | emu/port/inferno.c | 1 | ||||
| -rw-r--r-- | emu/port/pgrp.c | 26 |
4 files changed, 38 insertions, 67 deletions
diff --git a/emu/port/devcons.c b/emu/port/devcons.c index 8e823839..93dc6fd6 100644 --- a/emu/port/devcons.c +++ b/emu/port/devcons.c @@ -27,7 +27,6 @@ enum Qmsec, Qnotquiterandom, Qnull, - Qpin, Qrandom, Qscancode, Qsysctl, @@ -53,7 +52,6 @@ Dirtab contab[] = "msec", {Qmsec}, NUMSIZE, 0444, "notquiterandom", {Qnotquiterandom}, 0, 0444, "null", {Qnull}, 0, 0666, - "pin", {Qpin}, 0, 0666, "random", {Qrandom}, 0, 0444, "scancode", {Qscancode}, 0, 0444, "sysctl", {Qsysctl}, 0, 0644, @@ -283,8 +281,7 @@ consclose(Chan *c) static long consread(Chan *c, void *va, long n, vlong offset) { - ulong l; - int i, send; + int send; char *p, buf[64], ch; if(c->qid.type & QTDIR) @@ -309,12 +306,6 @@ consread(Chan *c, void *va, long n, vlong offset) genrandom(va, n); return n; - case Qpin: - p = "pin set"; - if(up->env->pgrp->pin == Nopin) - p = "no pin"; - return readstr(offset, va, n, p); - case Qhostowner: return readstr(offset, va, n, eve); @@ -333,20 +324,7 @@ consread(Chan *c, void *va, long n, vlong offset) return readstr(offset, va, n, buf); case Qdrivers: - p = malloc(READSTR); - if(p == nil) - error(Enomem); - l = 0; - for(i = 0; devtab[i] != nil; i++) - l += snprint(p+l, READSTR-l, "#%C %s\n", devtab[i]->dc, devtab[i]->name); - if(waserror()){ - free(p); - nexterror(); - } - n = readstr(offset, va, n, p); - poperror(); - free(p); - return n; + return devtabread(c, buf, n, offset); case Qmemory: return poolread(va, n, offset); @@ -490,16 +468,6 @@ conswrite(Chan *c, void *va, long n, vlong offset) case Qnull: break; - case Qpin: - if(up->env->pgrp->pin != Nopin) - error("pin already set"); - if(n >= sizeof(buf)) - n = sizeof(buf)-1; - strncpy(buf, va, n); - buf[n] = '\0'; - up->env->pgrp->pin = atoi(buf); - break; - case Qtime: if(n >= sizeof(buf)) n = sizeof(buf)-1; @@ -611,7 +579,9 @@ Dev consdevtab = { 'c', "cons", + devreset, consinit, + devshutdown, consattach, conswalk, consstat, diff --git a/emu/port/devtinyfs.c b/emu/port/devtinyfs.c index 33689745..8445ad6a 100644 --- a/emu/port/devtinyfs.c +++ b/emu/port/devtinyfs.c @@ -185,7 +185,7 @@ readdata(Tfs *fs, ulong bno, uchar *buf, int *lenp) { if(bno >= fs->nblocks) return 0; - if(devtab[fs->c->type]->read(fs->c, buf, Blen, Blen*bno) != Blen) + if(fs->c->dev->read(fs->c, buf, Blen, Blen*bno) != Blen) error(Eio); return validdata(fs, buf, lenp); } @@ -212,7 +212,7 @@ writedata(Tfs *fs, ulong bno, ulong next, uchar *buf, int len, int last) memmove(md.data, buf, len); md.sum = 0 - checksum((uchar*)&md); - if(devtab[fs->c->type]->write(fs->c, &md, Blen, Blen*bno) != Blen) + if(fs->c->dev->write(fs->c, &md, Blen, Blen*bno) != Blen) error(Eio); } @@ -233,7 +233,7 @@ writedir(Tfs *fs, Tfile *f) PUTS(md->pin, f->pin); md->sum = 0 - checksum(buf); - if(devtab[fs->c->type]->write(fs->c, buf, Blen, Blen*f->bno) != Blen) + if(fs->c->dev->write(fs->c, buf, Blen, Blen*f->bno) != Blen) error(Eio); } @@ -248,7 +248,7 @@ freeblocks(Tfs *fs, ulong bno, ulong bend) while(bno != bend && bno != Notabno){ mapclr(fs, bno); - if(devtab[fs->c->type]->read(fs->c, buf, Blen, Blen*bno) != Blen) + if(fs->c->dev->read(fs->c, buf, Blen, Blen*bno) != Blen) break; md = validdata(fs, buf, 0); if(md == 0) @@ -272,7 +272,7 @@ freefile(Tfs *fs, Tfile *f, ulong bend) /* change file type to free on medium */ if(f->bno != Notabno){ memset(buf, 0x55, Blen); - devtab[fs->c->type]->write(fs->c, buf, Blen, Blen*f->bno); + fs->c->dev->write(fs->c, buf, Blen, Blen*f->bno); mapclr(fs, f->bno); } @@ -332,7 +332,7 @@ newfile(Tfs *fs, char *name) rock.f->bno = mapalloc(rock.fs); rock.f->fbno = Notabno; rock.f->r = 1; - rock.f->pin = up->env->pgrp->pin; + rock.f->pin = Notapin; /* write directory block */ if(waserror()){ @@ -364,7 +364,7 @@ tfsinit(Tfs *fs) Mdir *mdir; Mdata *mdata; - n = devtab[fs->c->type]->stat(fs->c, dbuf, sizeof(dbuf)); + n = fs->c->dev->stat(fs->c, dbuf, sizeof(dbuf)); n = convM2D(dbuf, n, &d, nil); if(n <= 0) error("cannot stat tinyfs medium"); @@ -382,7 +382,7 @@ tfsinit(Tfs *fs) /* find files */ for(bno = 0; bno < fs->nblocks; bno++){ - n = devtab[fs->c->type]->read(fs->c, buf, Blen, Blen*bno); + n = fs->c->dev->read(fs->c, buf, Blen, Blen*bno); if(n != Blen) break; @@ -412,7 +412,7 @@ tfsinit(Tfs *fs) freefile(fs, f, bno); break; } - n = devtab[fs->c->type]->read(fs->c, buf, Blen, Blen*bno); + n = fs->c->dev->read(fs->c, buf, Blen, Blen*bno); if(n != Blen){ freefile(fs, f, bno); break; @@ -453,7 +453,7 @@ tinyfsgen(Chan *c, char *name, Dirtab *tab, int ntab, int i, Dir *dp) USED(ntab); USED(tab); - fs = &tinyfs.fs[c->dev]; + fs = &tinyfs.fs[c->devno]; if(i >= fs->nf) return -1; qid.vers = 0; @@ -525,7 +525,7 @@ tinyfsattach(char *spec) poperror(); c = devattach('F', spec); - c->dev = fs - tinyfs.fs; + c->devno = fs - tinyfs.fs; c->qid.type = QTDIR; c->qid.vers = 0; @@ -538,12 +538,12 @@ tinyfswalk(Chan *c, Chan *nc, char **name, int nname) Tfs *fs; Walkqid *wq; - fs = &tinyfs.fs[c->dev]; + fs = &tinyfs.fs[c->devno]; qlock(&fs->ql); wq = devwalk(c, nc, name, nname, 0, 0, tinyfsgen); if(wq != nil && (nc = wq->clone) != nil && nc->qid.path != Qdir){ - fs = &tinyfs.fs[nc->dev]; + fs = &tinyfs.fs[nc->devno]; fs->f[nc->qid.path-1].r++; } qunlock(&fs->ql); @@ -562,7 +562,7 @@ tinyfsopen(Chan *c, int omode) Tfile *f; volatile struct { Tfs *fs; } rock; - rock.fs = &tinyfs.fs[c->dev]; + rock.fs = &tinyfs.fs[c->devno]; if(c->qid.type & QTDIR){ if(omode != OREAD) @@ -600,7 +600,7 @@ tinyfscreate(Chan *c, char *name, int omode, ulong perm) USED(perm); - rock.fs = &tinyfs.fs[c->dev]; + rock.fs = &tinyfs.fs[c->devno]; qlock(&rock.fs->ql); if(waserror()){ @@ -625,7 +625,7 @@ tinyfsremove(Chan *c) if(c->qid.path == Qdir) error(Eperm); - fs = &tinyfs.fs[c->dev]; + fs = &tinyfs.fs[c->devno]; f = &fs->f[c->qid.path-1]; qlock(&fs->ql); freefile(fs, f, Notabno); @@ -639,7 +639,7 @@ tinyfsclose(Chan *c) Tfile *f, *nf; int i; - rock.fs = &tinyfs.fs[c->dev]; + rock.fs = &tinyfs.fs[c->devno]; qlock(&rock.fs->ql); @@ -703,7 +703,7 @@ tinyfsread(Chan *c, void *a, long n, vlong offset) return devdirread(c, a, n, 0, 0, tinyfsgen); p = a; - rock.fs = &tinyfs.fs[c->dev]; + rock.fs = &tinyfs.fs[c->devno]; f = &rock.fs->f[c->qid.path-1]; if(offset >= f->length) return 0; @@ -783,7 +783,7 @@ tinyfswrite(Chan *c, void *a, long n, vlong offset) return 0; p = a; - rock.fs = &tinyfs.fs[c->dev]; + rock.fs = &tinyfs.fs[c->devno]; f = &rock.fs->f[c->qid.path-1]; qlock(&rock.fs->ql); @@ -879,7 +879,9 @@ Dev tinyfsdevtab = { 'F', "tinyfs", + devreset, devinit, + devshutdown, tinyfsattach, tinyfswalk, tinyfsstat, diff --git a/emu/port/inferno.c b/emu/port/inferno.c index b568f9fa..eddacd20 100644 --- a/emu/port/inferno.c +++ b/emu/port/inferno.c @@ -859,7 +859,6 @@ Sys_pctl(void *fp) np.np->slash = cclone(dot); cnameclose(np.np->slash->name); np.np->slash->name = newcname("/"); - np.np->pin = o->pgrp->pin; /* pin is ALWAYS inherited */ np.np->nodevs = o->pgrp->nodevs; opg = o->pgrp; o->pgrp = np.np; diff --git a/emu/port/pgrp.c b/emu/port/pgrp.c index b3d473f3..55fa6c01 100644 --- a/emu/port/pgrp.c +++ b/emu/port/pgrp.c @@ -15,7 +15,6 @@ newpgrp(void) error(Enomem); p->r.ref = 1; p->pgrpid = incref(&pgrpid); - p->pin = Nopin; p->progmode = 0644; p->privatemem = 0; return p; @@ -44,8 +43,8 @@ closepgrp(Pgrp *p) } } wunlock(&p->ns); - cclose(p->slash); cclose(p->dot); + cclose(p->slash); free(p); } @@ -81,18 +80,23 @@ pgrpcpy(Pgrp *to, Pgrp *from) Mhead *f, **tom, **l, *mh; wlock(&from->ns); + if(waserror()){ + wunlock(&from->ns); + nexterror(); + } order = 0; tom = to->mnthash; for(i = 0; i < MNTHASH; i++) { l = tom++; for(f = from->mnthash[i]; f; f = f->hash) { rlock(&f->lock); - mh = malloc(sizeof(Mhead)); - if(mh == nil) { + if(waserror()){ runlock(&f->lock); - wunlock(&from->ns); - error(Enomem); + nexterror(); } + mh = malloc(sizeof(Mhead)); + if(mh == nil) + error(Enomem); mh->from = f->from; mh->r.ref = 1; incref(&mh->from->r); @@ -101,16 +105,12 @@ pgrpcpy(Pgrp *to, Pgrp *from) link = &mh->mount; for(m = f->mount; m; m = m->next) { n = newmount(mh, m->to, m->mflag, m->spec); - if(n == nil) { - runlock(&f->lock); - wunlock(&from->ns); - error(Enomem); - } m->copy = n; pgrpinsert(&order, m); *link = n; link = &n->next; } + poperror(); runlock(&f->lock); } } @@ -122,11 +122,11 @@ pgrpcpy(Pgrp *to, Pgrp *from) m->copy->mountid = mountid.ref++; unlock(&mountid.lk); - to->pin = from->pin; - + to->progmode = from->progmode; to->slash = cclone(from->slash); to->dot = cclone(from->dot); to->nodevs = from->nodevs; + poperror(); wunlock(&from->ns); } |
