|
|
1.1 root 1: #include "fserv.h"
2: #include "sys/neta.h"
3:
4: char cmdbuf[256];
5: int alive, rdcnt, wrcnt, dtime;
6: int rdnum;
7: struct senda y, nilrcv;
8: int host;
9:
10: work()
11: { int n;
12: struct senda *x;
13: dtime = children[myfd].dtime;
14: host = children[myfd].host;
15: silent = children[myfd].silent;
16: debugreset();
17: do {
18: /* would select be better? */
19: n = read(myfd, cmdbuf, sizeof(cmdbuf));
20: if(n < 0) {
21: debug("read -1 on %d for %s", myfd, children[myfd].who);
22: leave(2);
23: }
24: if(n != sizeof(struct senda)) {
25: debug("read %d wanted %d for %s", n, sizeof(struct senda),
26: children[myfd].who);
27: leave(3);
28: }
29: rdnum++;
30: if(rdnum % 20 == 4)
31: permredo(); /* every 10 minutes when idle */
32: x = (struct senda *)cmdbuf;
33: errno = 0;
34: y = nilrcv;
35: prcmd(x);
36: switch(x->cmd) {
37: default:
38: debug("unk cmnd %d for %s", n, children[myfd].who);
39: leave(4);
40: case NSTAT:
41: dostat(x);
42: break;
43: case NWRT:
44: dowrite(x);
45: break;
46: case NREAD:
47: doread(x);
48: break;
49: case NFREE:
50: dofree(x);
51: break;
52: case NTRUNC:
53: dotrunc(x);
54: break;
55: case NUPDAT:
56: doupdat(x);
57: break;
58: case NGET:
59: doget(x);
60: break;
61: case NNAMI:
62: donami(x);
63: break;
64: case NPUT:
65: doput(x);
66: break;
67: }
68: } while(alive > 0);
69: leave(0);
70: }
71:
72: leave(n)
73: { int i;
74: debug("leaving(%d)", n);
75: for(i = 0; i < dptr; i++) {
76: strcat(debugbuf[i], "\n");
77: write(dbgfd, debugbuf[i], strlen(debugbuf[i]));
78: }
79: exit(n);
80: }
81:
82: extern netf netftab[];
83: extern int nnetf;
84: dumpstate()
85: { struct senda *x = (struct senda *)cmdbuf;
86: netf *p;
87: int i;
88: debug("\tmesg: ver %d flags %d trannum %d\n\tuid %d gid %d dev 0x%x tag %d mode 0%o",
89: x->version, x->flags, x->trannum, x->uid, x->gid, x->dev, x->tag, x->mode);
90: debug("\t\tino %d count %d offset %d", x->ino, x->count, x->offset);
91: prcmd(x);
92: debug("\t%s: fl %d dtime %d dev 0x%x host %d",
93: children[myfd].who, children[myfd].flags, children[myfd].dtime,
94: children[myfd].dev, children[myfd].host);
95: for(i = 0; i < ndev; i++)
96: debug("\tdev: ours 0x%x his 0x%x", devtab[i].ours,
97: devtab[i].his);
98: for(p = netftab, i = 0; i < nnetf; i++, p++) {
99: debug("\tnetf %d dev 0x%x ino %d how %d fd %d %s",
100: p->tag, p->dev, p->ino, p->how, p->fd,
101: p->name? p->name: "(null)");
102: debug("\tstat dev 0x%x ino %d mode 0%o nlink %d size %d",
103: p->statb.st_dev, p->statb.st_ino, p->statb.st_mode,
104: p->statb.st_nlink, p->statb.st_size);
105: debug("\t\tuid %d gid %d ctime %s\t\t", p->statb.st_uid,
106: p->statb.st_gid, ctime(&p->statb.st_ctime));
107: }
108: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.