| plan 9 kernel history: overview | file list | diff list |
1990/11211/port/devpipe.c (diff list | history)
| 1990/1118/sys/src/9/port/devpipe.c:37,46 – 1990/11211/sys/src/9/port/devpipe.c:37,46 (short | long | prev | next) | ||
| 1990/1113 | }; | |
| 1990/0227 | ||
| 1990/1009 | Dirtab pipedir[]={ | |
| 1990/11211 | "data", {Sdataqid}, 0, 0600, "ctl", {Sctlqid}, 0, 0600, "data1", {Sdataqid}, 0, 0600, "ctl1", {Sctlqid}, 0, 0600, | |
| 1990/1009 | }; #define NPIPEDIR 4 | |
| 1990/1118/sys/src/9/port/devpipe.c:78,84 – 1990/11211/sys/src/9/port/devpipe.c:78,84 | ||
| 1990/1009 | lock(&pipealloc); if(pipealloc.free == 0){ unlock(&pipealloc); | |
| 1990/11211 | error(Enopipe); | |
| 1990/1009 | } p = pipealloc.free; pipealloc.free = p->next; | |
| 1990/1118/sys/src/9/port/devpipe.c:86,92 – 1990/11211/sys/src/9/port/devpipe.c:86,92 | ||
| 1990/1013 | panic("pipeattach"); | |
| 1990/1009 | unlock(&pipealloc); | |
| 1990/11211 | c->qid = (Qid){CHDIR|STREAMQID(2*(p - pipealloc.pipe), 0), 0}; | |
| 1990/0227 | return c; } | |
| 1990/1118/sys/src/9/port/devpipe.c:95,101 – 1990/11211/sys/src/9/port/devpipe.c:95,101 | ||
| 1990/0227 | { | |
| 1990/1009 | Pipe *p; | |
| 1990/11211 | p = &pipealloc.pipe[STREAMID(c->qid.path)/2]; | |
| 1990/0227 | nc = devclone(c, nc); | |
| 1990/1013 | if(incref(p) <= 1) panic("pipeclone"); | |
| 1990/1118/sys/src/9/port/devpipe.c:107,119 – 1990/11211/sys/src/9/port/devpipe.c:107,119 | ||
| 1990/1009 | { int id; | |
| 1990/0629 | ||
| 1990/1009 |
| |
| 1990/11211 | id = STREAMID(c->qid.path); | |
| 1990/1009 | if(i > 1) id++; if(tab==0 || i>=ntab) return -1; tab += i; | |
| 1990/11211 | devdir(c, (Qid){STREAMQID(id, tab->qid.path),0}, tab->name, tab->length, tab->perm, dp); | |
| 1990/1009 | return 1; | |
| 1990/0227 | } | |
| 1990/1118/sys/src/9/port/devpipe.c:139,147 – 1990/11211/sys/src/9/port/devpipe.c:139,147 | ||
| 1990/1009 | Pipe *p; Stream *local, *remote; | |
| 1990/11211 | if(c->qid.path & CHDIR){ | |
| 1990/1009 | if(omode != OREAD) | |
| 1990/11211 | error(Ebadarg); | |
| 1990/1009 | c->mode = omode; c->flag |= COPEN; c->offset = 0; | |
| 1990/1118/sys/src/9/port/devpipe.c:148,154 – 1990/11211/sys/src/9/port/devpipe.c:148,154 | ||
| 1990/1009 | return c; } | |
| 1990/11211 | p = &pipealloc.pipe[STREAMID(c->qid.path)/2]; | |
| 1990/1009 | remote = 0; if(waserror()){ unlock(p); | |
| 1990/1118/sys/src/9/port/devpipe.c:163,169 – 1990/11211/sys/src/9/port/devpipe.c:163,169 | ||
| 1990/1009 | /* * First stream opened, create the other end also */ | |
| 1990/11211 | remote = streamnew(c->type, c->dev, STREAMID(c->qid.path)^1, &pipeinfo, 1); | |
| 1990/1009 | /* * connect the device ends of both streams | |
| 1990/1118/sys/src/9/port/devpipe.c:192,210 – 1990/11211/sys/src/9/port/devpipe.c:192,210 | ||
| 1990/0227 | void pipecreate(Chan *c, char *name, int omode, ulong perm) { | |
| 1990/11211 | error(Egreg); | |
| 1990/0227 | } void piperemove(Chan *c) { | |
| 1990/11211 | error(Egreg); | |
| 1990/0227 | } void pipewstat(Chan *c, char *db) { | |
| 1990/0617 |
| |
| 1990/11211 | error(Eperm); | |
| 1990/0227 | } void | |
| 1990/1118/sys/src/9/port/devpipe.c:211,224 – 1990/11211/sys/src/9/port/devpipe.c:211,228 | ||
| 1990/0227 | pipeclose(Chan *c) { | |
| 1990/1009 | Pipe *p; | |
| 1990/11211 | Stream *remote; | |
| 1990/0629 | ||
| 1990/1009 |
| |
| 1990/11211 | p = &pipealloc.pipe[STREAMID(c->qid.path)/2]; | |
| 1990/0629 | ||
| 1990/1009 | /* | |
| 1990/1011 | * take care of associated streams | |
| 1990/1009 | */ | |
| 1990/1118 |
| |
| 1990/1009 |
| |
| 1990/11211 | if(c->stream){ remote = c->stream->devq->ptr; if(streamclose(c) <= 0) streamexit(remote, 0); } | |
| 1990/11161 | /* * free the structure | |
| 1990/1118/sys/src/9/port/devpipe.c:236,242 – 1990/11211/sys/src/9/port/devpipe.c:240,246 | ||
| 1990/0227 | long piperead(Chan *c, void *va, long n) { | |
| 1990/1009 |
| |
| 1990/11211 | if(c->qid.path & CHDIR) | |
| 1990/1009 | return devdirread(c, va, n, pipedir, NPIPEDIR, pipegen); else return streamread(c, va, n); | |
| 1990/1118/sys/src/9/port/devpipe.c:251,257 – 1990/11211/sys/src/9/port/devpipe.c:255,261 | ||
| 1990/0227 | { if(waserror()){ postnote(u->p, 1, "sys: write on closed pipe", NExit); | |
| 1990/11211 | error(Egreg); | |
| 1990/0227 | } | |
| 1990/0513 | n = streamwrite(c, va, n, 0); poperror(); | |
| 1990/1118/sys/src/9/port/devpipe.c:258,275 – 1990/11211/sys/src/9/port/devpipe.c:262,267 | ||
| 1990/0513 | return n; | |
| 1990/0227 | } | |
| 1990/1118/sys/src/9/port/devpipe.c:317,326 – 1990/11211/sys/src/9/port/devpipe.c:309,312 | ||
| 1990/0629 | bp = allocb(0); bp->type = M_HANGUP; PUTNEXT(q, bp); | |
| 1990/1118 |
| |
| 1990/0227 | } | |