static void fsstat(Req *r) { int i, path; path = r->fid->qid.path; switch(path) { case Qroot: fillstat(&r->d, "/", QTDIR, Qroot, 0555|DMDIR); break; case Qfactotum: fillstat(&r->d, "factotum", QTDIR, Qfactotum, 0555|DMDIR); break; default: for(i=0; i<nelem(dirtab); i++) if(dirtab[i].qidpath == path) { fillstat(&r->d, dirtab[i].name, 0, dirtab[i].qidpath, dirtab[i].perm); goto Break2; } respond(r, "file not found"); break; } Break2: respond(r, nil); }
static int execgen(int i, Dir *d, void*) { if(i < 1){ fillstat(d, PATH(Qclone, 0)); return 0; } i -= 1; if(i < nclient){ fillstat(d, PATH(Qn, i)); return 0; } return -1; }
static int rootgen(int i, Dir *d, void*) { if(i < 1){ fillstat(d, PATH(Qexec, 0)); return 0; } return -1; }
static int fsdirgen(int n, Dir *dir, void *v) { USED(v); if(n >= nelem(dirtab)) return -1; fillstat(dir, dirtab[n].name, 0, dirtab[n].qidpath, dirtab[n].perm); return 0; }
static int rootdirgen(int n, Dir *dir, void *v) { USED(v); if(n > 0) return -1; fillstat(dir, factname, QTDIR, Qfactotum, DMDIR|0555); return 0; }
static void fsstat(Req *r) { Aux *a; a = r->fid->aux; if(r->fid->qid.path == 0 && (r->fid->qid.type & QTDIR)) nntprefreshall(net); else if(a->g->isgroup) nntprefresh(net, a->g); fillstat(&r->d, a); respond(r, nil); }
static int conngen(int i, Dir *d, void *aux) { Client *c; c = aux; i += Qn+1; if(i <= Qstatus){ fillstat(d, PATH(i, c->num)); return 0; } return -1; }
static void fsstat(Req *r) { fillstat(&r->d, r->fid->qid.path); respond(r, nil); }