7 sunCallPack(SunProg *prog, uchar *a, uchar *ea, uchar **pa, SunCall *c)
10 int (*pack)(uchar*, uchar*, uchar**, SunCall*);
14 if(c->type < 0 || c->type >= prog->nproc || (pack=prog->proc[c->type].pack) == nil)
15 return SunProcUnavail;
16 if((*pack)(a, ea, pa, c) < 0)
17 return SunGarbageArgs;
22 sunCallUnpack(SunProg *prog, uchar *a, uchar *ea, uchar **pa, SunCall *c)
25 int (*unpack)(uchar*, uchar*, uchar**, SunCall*);
29 if(c->type < 0 || c->type >= prog->nproc || (unpack=prog->proc[c->type].unpack) == nil)
30 return SunProcUnavail;
31 if((*unpack)(a, ea, pa, c) < 0){
32 fprint(2, "in: %.*H unpack failed\n", (int)(ea-a), a);
33 return SunGarbageArgs;
39 sunCallUnpackAlloc(SunProg *prog, SunCallType type, uchar *a, uchar *ea, uchar **pa, SunCall **pc)
43 int (*unpack)(uchar*, uchar*, uchar**, SunCall*);
48 if(type < 0 || type >= prog->nproc || (unpack=prog->proc[type].unpack) == nil)
49 return SunProcUnavail;
50 size = prog->proc[type].sizeoftype;
52 return SunProcUnavail;
57 if((*unpack)(a, ea, pa, c) < 0){
58 fprint(2, "in: %.*H unpack failed\n", (int)(ea-a), a);
60 return SunGarbageArgs;
67 sunCallSize(SunProg *prog, SunCall *c)
69 uint (*size)(SunCall*);
71 if(c->type < 0 || c->type >= prog->nproc || (size=prog->proc[c->type].size) == nil)