12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #include <u.h>
- #include <libc.h>
- #include <thread.h>
- #include <sunrpc.h>
- /*
- * print formatters
- */
- int
- sunRpcFmt(Fmt *f)
- {
- SunRpc *rpc;
- rpc = va_arg(f->args, SunRpc*);
- sunRpcPrint(f, rpc);
- return 0;
- }
- static SunProg **fmtProg;
- static int nfmtProg;
- static RWLock fmtLock;
- void
- sunFmtInstall(SunProg *p)
- {
- int i;
- wlock(&fmtLock);
- for(i=0; i<nfmtProg; i++){
- if(fmtProg[i] == p){
- wunlock(&fmtLock);
- return;
- }
- }
- if(nfmtProg%16 == 0)
- fmtProg = erealloc(fmtProg, sizeof(fmtProg[0])*(nfmtProg+16));
- fmtProg[nfmtProg++] = p;
- wunlock(&fmtLock);
- }
- int
- sunCallFmt(Fmt *f)
- {
- int i;
- void (*fmt)(Fmt*, SunCall*);
- SunCall *c;
- SunProg *p;
- c = va_arg(f->args, SunCall*);
- rlock(&fmtLock);
- for(i=0; i<nfmtProg; i++){
- p = fmtProg[i];
- if(p->prog == c->rpc.prog && p->vers == c->rpc.vers){
- runlock(&fmtLock);
- if(c->type < 0 || c->type >= p->nproc || (fmt=p->proc[c->type].fmt) == nil)
- return fmtprint(f, "unknown proc %c%d", "TR"[c->type&1], c->type>>1);
- (*fmt)(f, c);
- return 0;
- }
- }
- runlock(&fmtLock);
- fmtprint(f, "<sunrpc %d %d %c%d>", c->rpc.prog, c->rpc.vers, "TR"[c->type&1], c->type>>1);
- return 0;
- }
|