void fsread(Req *r) { char *s; switch((int)r->fid->qid.path){ case Qroot: dirread9p(r, rootgen, nil); respond(r, nil); break; case Qdir: dirread9p(r, dirgen, nil); respond(r, nil); break; case Qctl: s = ctlstring(); readstr(r, s); free(s); respond(r, nil); break; default: rdwrpart(r); break; } }
static void fsread(Req *r) { char e[ERRMAX], *s; uint32_t path; path = r->fid->qid.path; switch(TYPE(path)){ default: snprint(e, sizeof e, "bug in execnet path=%lx", path); respond(r, e); break; case Qroot: dirread9p(r, rootgen, nil); respond(r, nil); break; case Qexec: dirread9p(r, execgen, nil); respond(r, nil); break; case Qn: dirread9p(r, conngen, client[NUM(path)]); respond(r, nil); break; case Qctl: snprint(e, sizeof e, "%u", NUM(path)); readstr(r, e); respond(r, nil); break; case Qdata: dataread(r, client[NUM(path)]); break; case Qlocal: snprint(e, sizeof e, "%d", client[NUM(path)]->pid); readstr(r, e); respond(r, nil); break; case Qremote: s = client[NUM(path)]->cmd; if(strlen(s) >= 5) /* "exec " */ readstr(r, s+5); else readstr(r, s); respond(r, nil); break; case Qstatus: readstr(r, statusstr[client[NUM(path)]->status]); respond(r, nil); break; } }
void fsread(Req *r) { int n; char err[128]; switch((int)r->fid->qid.path){ case Qroot: dirread9p(r, fsdirgen, nil); respond(r, nil); break; case Qgrep: if(grepstate == Waiting) respond(r, "Waiting for query"); else{ if((n = grepread(r, err, sizeof(err))) == -1) respond(r, err); else respond(r, nil); if(n <= 0){ close(grepout[0]); if(waitpid() != greppid) exits("Pid was wrong"); greppid = 0; grepstate = Waiting; grepatime = time(nil); grepvers++; } } break; } }
static void fsread(Req *r) { if(r->fid->qid.path == 0) dirread9p(r, dirgen, nil); else r->ofcall.count = 0; respond(r, nil); }
static void fsread(Req *r) { vlong n, m, got; Aux *a = r->fid->aux; char *buf = r->ofcall.data; vlong len = r->ifcall.count; vlong off = r->ifcall.offset; if(ptype(r->fid->qid.path) == Pinfo){ r->ofcall.count = readinfo(pindex(r->fid->qid.path), buf, len, off); respond(r, nil); return; } if(r->fid->qid.type & QTDIR){ dirread9p(r, dirgen, a); respond(r, nil); return; } got = 0; n = Sess->mtu -OVERHEAD; do{ if(len - got < n) n = len - got; m = CIFSread(Sess, a->sp, a->fh, off + got, buf + got, n, len); if(m != -1) got += m; } while(got < len && m >= n); r->ofcall.count = got; if(m == -1) responderrstr(r); else respond(r, nil); }
static void fsread(Req *r) { char buf[MAXPATH], *s; Revfile *rf; int i, n; vlong off; int len; off = r->ifcall.offset; len = r->ifcall.count; rf = r->fid->aux; switch(rf->level){ case Qroot: if(off == 0){ revlogupdate(&changelog); revlogupdate(&manifest); } dirread9p(r, rootgen, nil); respond(r, nil); return; case Qrev: dirread9p(r, revgen, rf->info); respond(r, nil); return; case Qrev0: case Qrev1: case Qrev2: s = nil; if(rf->buf) goto Strgen; i = hashrev(&changelog, rf->info->chash); if(rf->level == Qrev1) i = changelog.map[i].p1rev; else if(rf->level == Qrev2) i = changelog.map[i].p2rev; Revgen: s = fsmkrevname(buf, sizeof(buf), i); goto Strgen; case Qtreerev: if((i = hashrev(rf->rlog, rf->node->hash)) >= 0) i = rf->rlog->map[i].linkrev; goto Revgen; case Qlog: if(off >= rf->info->loglen) len = 0; else if((off + len) >= rf->info->loglen) len = rf->info->loglen - off; goto Fdgen; case Qwho: s = rf->info->who; goto Strgen; case Qwhy: s = rf->info->why; Strgen: if(rf->buf == nil) rf->buf = s ? smprint("%s\n", s) : estrdup9p(""); readstr(r, rf->buf); respond(r, nil); return; case Qtree: if(rf->node->down){ case Qfiles: case Qchanges: dirread9p(r, treegen, rf->node->down); respond(r, nil); return; } Fdgen: if(rf->fd < 0) break; if((n = pread(rf->fd, r->ofcall.data, len, off + rf->doff)) < 0){ responderror(r); return; } r->ofcall.count = n; respond(r, nil); return; } respond(r, "bug in fsread"); }
static void xread(Req *r) { int i, size, height, ascent; vlong path; Fmt fmt; XFont *f; char *data; Memsubfont *sf; Memimage *m; path = r->fid->qid.path; switch(QTYPE(path)) { case Qroot: dirread9p(r, rootgen, nil); break; case Qfontdir: dirread9p(r, fontgen, r->fid); break; case Qsizedir: dirread9p(r, sizegen, r->fid); break; case Qfontfile: fmtstrinit(&fmt); f = &xfont[QFONT(path)]; load(f); if(f->unit == 0 && f->loadheight == nil) { readstr(r, "font missing\n"); break; } height = 0; ascent = 0; if(f->unit > 0) { height = f->height * (int)QSIZE(path)/f->unit + 0.99999999; ascent = height - (int)(-f->originy * (int)QSIZE(path)/f->unit + 0.99999999); } if(f->loadheight != nil) f->loadheight(f, QSIZE(path), &height, &ascent); fmtprint(&fmt, "%11d %11d\n", height, ascent); for(i=0; i<nelem(f->range); i++) { if(f->range[i] == 0) continue; fmtprint(&fmt, "0x%04x 0x%04x x%04x.bit\n", i*SubfontSize, ((i+1)*SubfontSize) - 1, i*SubfontSize); } data = fmtstrflush(&fmt); readstr(r, data); free(data); break; case Qsubfontfile: f = &xfont[QFONT(path)]; load(f); if(r->fid->aux == nil) { r->fid->aux = mksubfont(f, f->name, QRANGE(path)*SubfontSize, ((QRANGE(path)+1)*SubfontSize)-1, QSIZE(path), QANTIALIAS(path)); if(r->fid->aux == nil) { responderrstr(r); return; } } sf = r->fid->aux; m = sf->bits; if(r->ifcall.offset < 5*12) { char *chan; if(QANTIALIAS(path)) chan = "k8"; else chan = "k1"; data = smprint("%11s %11d %11d %11d %11d ", chan, m->r.min.x, m->r.min.y, m->r.max.x, m->r.max.y); readstr(r, data); free(data); break; } r->ifcall.offset -= 5*12; size = bytesperline(m->r, chantodepth(m->chan)) * Dy(m->r); if(r->ifcall.offset < size) { readbuf(r, byteaddr(m, m->r.min), size); break; } r->ifcall.offset -= size; data = emalloc9p(3*12+6*(sf->n+1)); sprint(data, "%11d %11d %11d ", sf->n, sf->height, sf->ascent); packinfo(sf->info, (uchar*)data+3*12, sf->n); readbuf(r, data, 3*12+6*(sf->n+1)); free(data); break; } respond(r, nil); }