Blame


1 551445b9 2004-04-21 devnull #include <u.h>
2 551445b9 2004-04-21 devnull #include <libc.h>
3 551445b9 2004-04-21 devnull #include <thread.h>
4 551445b9 2004-04-21 devnull #include <sunrpc.h>
5 551445b9 2004-04-21 devnull
6 551445b9 2004-04-21 devnull /*
7 551445b9 2004-04-21 devnull * print formatters
8 551445b9 2004-04-21 devnull */
9 551445b9 2004-04-21 devnull int
10 551445b9 2004-04-21 devnull sunrpcfmt(Fmt *f)
11 551445b9 2004-04-21 devnull {
12 551445b9 2004-04-21 devnull SunRpc *rpc;
13 551445b9 2004-04-21 devnull
14 551445b9 2004-04-21 devnull rpc = va_arg(f->args, SunRpc*);
15 551445b9 2004-04-21 devnull sunrpcprint(f, rpc);
16 551445b9 2004-04-21 devnull return 0;
17 551445b9 2004-04-21 devnull }
18 551445b9 2004-04-21 devnull
19 551445b9 2004-04-21 devnull static SunProg **fmtProg;
20 551445b9 2004-04-21 devnull static int nfmtProg;
21 551445b9 2004-04-21 devnull static RWLock fmtLock;
22 551445b9 2004-04-21 devnull
23 551445b9 2004-04-21 devnull void
24 551445b9 2004-04-21 devnull sunfmtinstall(SunProg *p)
25 551445b9 2004-04-21 devnull {
26 551445b9 2004-04-21 devnull int i;
27 551445b9 2004-04-21 devnull
28 551445b9 2004-04-21 devnull wlock(&fmtLock);
29 551445b9 2004-04-21 devnull for(i=0; i<nfmtProg; i++){
30 551445b9 2004-04-21 devnull if(fmtProg[i] == p){
31 551445b9 2004-04-21 devnull wunlock(&fmtLock);
32 551445b9 2004-04-21 devnull return;
33 551445b9 2004-04-21 devnull }
34 551445b9 2004-04-21 devnull }
35 551445b9 2004-04-21 devnull if(nfmtProg%16 == 0)
36 551445b9 2004-04-21 devnull fmtProg = erealloc(fmtProg, sizeof(fmtProg[0])*(nfmtProg+16));
37 551445b9 2004-04-21 devnull fmtProg[nfmtProg++] = p;
38 551445b9 2004-04-21 devnull wunlock(&fmtLock);
39 551445b9 2004-04-21 devnull }
40 551445b9 2004-04-21 devnull
41 551445b9 2004-04-21 devnull int
42 551445b9 2004-04-21 devnull suncallfmt(Fmt *f)
43 551445b9 2004-04-21 devnull {
44 551445b9 2004-04-21 devnull int i;
45 551445b9 2004-04-21 devnull void (*fmt)(Fmt*, SunCall*);
46 551445b9 2004-04-21 devnull SunCall *c;
47 551445b9 2004-04-21 devnull SunProg *p;
48 551445b9 2004-04-21 devnull
49 551445b9 2004-04-21 devnull c = va_arg(f->args, SunCall*);
50 551445b9 2004-04-21 devnull rlock(&fmtLock);
51 551445b9 2004-04-21 devnull for(i=0; i<nfmtProg; i++){
52 551445b9 2004-04-21 devnull p = fmtProg[i];
53 551445b9 2004-04-21 devnull if(p->prog == c->rpc.prog && p->vers == c->rpc.vers){
54 551445b9 2004-04-21 devnull runlock(&fmtLock);
55 0cfb3760 2012-10-21 rsc if((int32)c->type < 0 || c->type >= p->nproc || (fmt=p->proc[c->type].fmt) == nil)
56 551445b9 2004-04-21 devnull return fmtprint(f, "unknown proc %c%d", "TR"[c->type&1], c->type>>1);
57 551445b9 2004-04-21 devnull (*fmt)(f, c);
58 551445b9 2004-04-21 devnull return 0;
59 551445b9 2004-04-21 devnull }
60 551445b9 2004-04-21 devnull }
61 551445b9 2004-04-21 devnull runlock(&fmtLock);
62 551445b9 2004-04-21 devnull fmtprint(f, "<sunrpc %d %d %c%d>", c->rpc.prog, c->rpc.vers, "TR"[c->type&1], c->type>>1);
63 551445b9 2004-04-21 devnull return 0;
64 551445b9 2004-04-21 devnull }