| plan 9 kernel history: overview | file list | diff list |
2001/0527/port/devpipe.c (diff list | history)
| 2000/1201/sys/src/9/port/devpipe.c:33,42 – 2001/0527/sys/src/9/port/devpipe.c:33,43 (short | long | prev | next) | ||
| 1990/0227 | ||
| 1992/0621 | Dirtab pipedir[] = { | |
| 1993/0528 |
| |
| 2001/0527 | ".", {Qdir,0,QTDIR}, 0, DMDIR|0500, "data", {Qdata0}, 0, 0600, "data1", {Qdata1}, 0, 0600, | |
| 1990/1009 | }; | |
| 1994/0503 |
| |
| 2001/0527 | #define NPIPEDIR 3 | |
| 1990/1009 | ||
| 1997/0327 | static void | |
| 1990/0227 | pipeinit(void) | |
| 2000/1201/sys/src/9/port/devpipe.c:80,132 – 2001/0527/sys/src/9/port/devpipe.c:81,109 | ||
| 1992/0621 | p->path = ++pipealloc.path; | |
| 1990/1009 | unlock(&pipealloc); | |
| 1993/0528 |
| |
| 2001/0527 | mkqid(&c->qid, NETQID(2*p->path, Qdir), 0, QTDIR); | |
| 1993/0528 | c->aux = p; | |
| 1991/1227 | c->dev = 0; | |
| 1990/0227 | return c; } | |
| 1997/0327 |
| |
| 1990/0227 |
| |
| 1990/1009 |
| |
| 1993/0528 |
| |
| 1990/0227 |
| |
| 1993/0528 |
| |
| 1993/1111 |
| |
| 1993/0528 |
| |
| 1990/1009 |
| |
| 1990/0227 | ||
| 1997/0327 | static int | |
| 1990/1009 |
| |
| 2001/0527 | pipegen(Chan *c, char*, Dirtab *tab, int ntab, int i, Dir *dp) | |
| 1990/1009 | { | |
| 2000/0516 | int len; Pipe *p; | |
| 2001/0527 | Qid q; | |
| 1990/0629 | ||
| 1999/1230 | if(i == DEVDOTDOT){ | |
| 2001/0527 | devdir(c, c->qid, "#|", 0, eve, DMDIR|0555, dp); | |
| 1999/1230 | return 1; } | |
| 1993/0528 |
| |
| 1990/1009 | if(tab==0 || i>=ntab) return -1; | |
| 2001/0527 | ||
| 1990/1009 | tab += i; | |
| 2000/0516 | p = c->aux; | |
| 2001/0527 | switch((ulong)tab->qid.path){ | |
| 2000/0516 | case Qdata0: len = qlen(p->q[0]); break; | |
| 2000/1201/sys/src/9/port/devpipe.c:137,155 – 2001/0527/sys/src/9/port/devpipe.c:114,154 | ||
| 2000/0516 | len = tab->length; break; } | |
| 2001/0527 | mkqid(&q, NETQID(NETID(c->qid.path), tab->qid.path), 0, QTFILE); devdir(c, q, tab->name, len, eve, tab->perm, dp); | |
| 1990/1009 | return 1; | |
| 1990/0227 | } | |
| 1990/1009 | ||
| 1997/0327 |
| |
| 1990/0227 |
| |
| 2001/0527 | static Walkqid* pipewalk(Chan *c, Chan *nc, char **name, int nname) | |
| 1990/0227 | { | |
| 1990/1009 |
| |
| 2001/0527 | Walkqid *wq; Pipe *p; wq = devwalk(c, nc, name, nname, pipedir, NPIPEDIR, pipegen); if(wq != nil && wq->clone != nil && wq->clone != c){ p = c->aux; qlock(p); p->ref++; if(c->flag & COPEN){ print("channel open in pipewalk\n"); switch(NETTYPE(c->qid.path)){ case Qdata0: p->qref[0]++; break; case Qdata1: p->qref[1]++; break; } } qunlock(p); } return wq; | |
| 1990/0227 | } | |
| 1997/0327 |
| |
| 1990/0227 |
| |
| 2001/0527 | static int pipestat(Chan *c, uchar *db, int n) | |
| 1990/0227 | { | |
| 1993/0528 | Pipe *p; Dir dir; | |
| 2000/1201/sys/src/9/port/devpipe.c:158,164 – 2001/0527/sys/src/9/port/devpipe.c:157,163 | ||
| 1993/0528 | switch(NETTYPE(c->qid.path)){ case Qdir: | |
| 2001/0527 | devdir(c, c->qid, ".", 0, eve, DMDIR|0555, &dir); | |
| 1993/0528 | break; case Qdata0: | |
| 1993/0530 | devdir(c, c->qid, "data", qlen(p->q[0]), eve, 0660, &dir); | |
| 2000/1201/sys/src/9/port/devpipe.c:169,175 – 2001/0527/sys/src/9/port/devpipe.c:168,177 | ||
| 1993/0528 | default: panic("pipestat"); } | |
| 2001/0527 | n = convD2M(&dir, db, n); if(n < BIT16SZ) error(Eshortstat); return n; | |
| 1990/0227 | } | |
| 1990/1009 | /* | |
| 2000/1201/sys/src/9/port/devpipe.c:180,186 – 2001/0527/sys/src/9/port/devpipe.c:182,188 | ||
| 1990/0227 | { | |
| 1990/1009 | Pipe *p; | |
| 1990/11211 |
| |
| 2001/0527 | if(c->qid.type & QTDIR){ | |
| 1990/1009 | if(omode != OREAD) | |
| 1990/11211 | error(Ebadarg); | |
| 1990/1009 | c->mode = omode; | |
| 2000/1201/sys/src/9/port/devpipe.c:372,378 – 2001/0527/sys/src/9/port/devpipe.c:374,379 | ||
| 1997/0327 | devreset, pipeinit, pipeattach, | |