xref: /plan9/sys/src/cmd/unix/drawterm/libc/convS2M.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1*8ccd4a63SDavid du Colombier #include	<u.h>
2*8ccd4a63SDavid du Colombier #include	<libc.h>
3*8ccd4a63SDavid du Colombier #include	<fcall.h>
4*8ccd4a63SDavid du Colombier 
5*8ccd4a63SDavid du Colombier static
6*8ccd4a63SDavid du Colombier uchar*
pstring(uchar * p,char * s)7*8ccd4a63SDavid du Colombier pstring(uchar *p, char *s)
8*8ccd4a63SDavid du Colombier {
9*8ccd4a63SDavid du Colombier 	uint n;
10*8ccd4a63SDavid du Colombier 
11*8ccd4a63SDavid du Colombier 	if(s == nil){
12*8ccd4a63SDavid du Colombier 		PBIT16(p, 0);
13*8ccd4a63SDavid du Colombier 		p += BIT16SZ;
14*8ccd4a63SDavid du Colombier 		return p;
15*8ccd4a63SDavid du Colombier 	}
16*8ccd4a63SDavid du Colombier 
17*8ccd4a63SDavid du Colombier 	n = strlen(s);
18*8ccd4a63SDavid du Colombier 	PBIT16(p, n);
19*8ccd4a63SDavid du Colombier 	p += BIT16SZ;
20*8ccd4a63SDavid du Colombier 	memmove(p, s, n);
21*8ccd4a63SDavid du Colombier 	p += n;
22*8ccd4a63SDavid du Colombier 	return p;
23*8ccd4a63SDavid du Colombier }
24*8ccd4a63SDavid du Colombier 
25*8ccd4a63SDavid du Colombier static
26*8ccd4a63SDavid du Colombier uchar*
pqid(uchar * p,Qid * q)27*8ccd4a63SDavid du Colombier pqid(uchar *p, Qid *q)
28*8ccd4a63SDavid du Colombier {
29*8ccd4a63SDavid du Colombier 	PBIT8(p, q->type);
30*8ccd4a63SDavid du Colombier 	p += BIT8SZ;
31*8ccd4a63SDavid du Colombier 	PBIT32(p, q->vers);
32*8ccd4a63SDavid du Colombier 	p += BIT32SZ;
33*8ccd4a63SDavid du Colombier 	PBIT64(p, q->path);
34*8ccd4a63SDavid du Colombier 	p += BIT64SZ;
35*8ccd4a63SDavid du Colombier 	return p;
36*8ccd4a63SDavid du Colombier }
37*8ccd4a63SDavid du Colombier 
38*8ccd4a63SDavid du Colombier static
39*8ccd4a63SDavid du Colombier uint
stringsz(char * s)40*8ccd4a63SDavid du Colombier stringsz(char *s)
41*8ccd4a63SDavid du Colombier {
42*8ccd4a63SDavid du Colombier 	if(s == nil)
43*8ccd4a63SDavid du Colombier 		return BIT16SZ;
44*8ccd4a63SDavid du Colombier 
45*8ccd4a63SDavid du Colombier 	return BIT16SZ+strlen(s);
46*8ccd4a63SDavid du Colombier }
47*8ccd4a63SDavid du Colombier 
48*8ccd4a63SDavid du Colombier uint
sizeS2M(Fcall * f)49*8ccd4a63SDavid du Colombier sizeS2M(Fcall *f)
50*8ccd4a63SDavid du Colombier {
51*8ccd4a63SDavid du Colombier 	uint n;
52*8ccd4a63SDavid du Colombier 	int i;
53*8ccd4a63SDavid du Colombier 
54*8ccd4a63SDavid du Colombier 	n = 0;
55*8ccd4a63SDavid du Colombier 	n += BIT32SZ;	/* size */
56*8ccd4a63SDavid du Colombier 	n += BIT8SZ;	/* type */
57*8ccd4a63SDavid du Colombier 	n += BIT16SZ;	/* tag */
58*8ccd4a63SDavid du Colombier 
59*8ccd4a63SDavid du Colombier 	switch(f->type)
60*8ccd4a63SDavid du Colombier 	{
61*8ccd4a63SDavid du Colombier 	default:
62*8ccd4a63SDavid du Colombier 		return 0;
63*8ccd4a63SDavid du Colombier 
64*8ccd4a63SDavid du Colombier 	case Tversion:
65*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
66*8ccd4a63SDavid du Colombier 		n += stringsz(f->version);
67*8ccd4a63SDavid du Colombier 		break;
68*8ccd4a63SDavid du Colombier 
69*8ccd4a63SDavid du Colombier 	case Tflush:
70*8ccd4a63SDavid du Colombier 		n += BIT16SZ;
71*8ccd4a63SDavid du Colombier 		break;
72*8ccd4a63SDavid du Colombier 
73*8ccd4a63SDavid du Colombier 	case Tauth:
74*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
75*8ccd4a63SDavid du Colombier 		n += stringsz(f->uname);
76*8ccd4a63SDavid du Colombier 		n += stringsz(f->aname);
77*8ccd4a63SDavid du Colombier 		break;
78*8ccd4a63SDavid du Colombier 
79*8ccd4a63SDavid du Colombier 	case Tattach:
80*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
81*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
82*8ccd4a63SDavid du Colombier 		n += stringsz(f->uname);
83*8ccd4a63SDavid du Colombier 		n += stringsz(f->aname);
84*8ccd4a63SDavid du Colombier 		break;
85*8ccd4a63SDavid du Colombier 
86*8ccd4a63SDavid du Colombier 	case Twalk:
87*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
88*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
89*8ccd4a63SDavid du Colombier 		n += BIT16SZ;
90*8ccd4a63SDavid du Colombier 		for(i=0; i<f->nwname; i++)
91*8ccd4a63SDavid du Colombier 			n += stringsz(f->wname[i]);
92*8ccd4a63SDavid du Colombier 		break;
93*8ccd4a63SDavid du Colombier 
94*8ccd4a63SDavid du Colombier 	case Topen:
95*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
96*8ccd4a63SDavid du Colombier 		n += BIT8SZ;
97*8ccd4a63SDavid du Colombier 		break;
98*8ccd4a63SDavid du Colombier 
99*8ccd4a63SDavid du Colombier 	case Tcreate:
100*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
101*8ccd4a63SDavid du Colombier 		n += stringsz(f->name);
102*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
103*8ccd4a63SDavid du Colombier 		n += BIT8SZ;
104*8ccd4a63SDavid du Colombier 		break;
105*8ccd4a63SDavid du Colombier 
106*8ccd4a63SDavid du Colombier 	case Tread:
107*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
108*8ccd4a63SDavid du Colombier 		n += BIT64SZ;
109*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
110*8ccd4a63SDavid du Colombier 		break;
111*8ccd4a63SDavid du Colombier 
112*8ccd4a63SDavid du Colombier 	case Twrite:
113*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
114*8ccd4a63SDavid du Colombier 		n += BIT64SZ;
115*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
116*8ccd4a63SDavid du Colombier 		n += f->count;
117*8ccd4a63SDavid du Colombier 		break;
118*8ccd4a63SDavid du Colombier 
119*8ccd4a63SDavid du Colombier 	case Tclunk:
120*8ccd4a63SDavid du Colombier 	case Tremove:
121*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
122*8ccd4a63SDavid du Colombier 		break;
123*8ccd4a63SDavid du Colombier 
124*8ccd4a63SDavid du Colombier 	case Tstat:
125*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
126*8ccd4a63SDavid du Colombier 		break;
127*8ccd4a63SDavid du Colombier 
128*8ccd4a63SDavid du Colombier 	case Twstat:
129*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
130*8ccd4a63SDavid du Colombier 		n += BIT16SZ;
131*8ccd4a63SDavid du Colombier 		n += f->nstat;
132*8ccd4a63SDavid du Colombier 		break;
133*8ccd4a63SDavid du Colombier /*
134*8ccd4a63SDavid du Colombier  */
135*8ccd4a63SDavid du Colombier 
136*8ccd4a63SDavid du Colombier 	case Rversion:
137*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
138*8ccd4a63SDavid du Colombier 		n += stringsz(f->version);
139*8ccd4a63SDavid du Colombier 		break;
140*8ccd4a63SDavid du Colombier 
141*8ccd4a63SDavid du Colombier 	case Rerror:
142*8ccd4a63SDavid du Colombier 		n += stringsz(f->ename);
143*8ccd4a63SDavid du Colombier 		break;
144*8ccd4a63SDavid du Colombier 
145*8ccd4a63SDavid du Colombier 	case Rflush:
146*8ccd4a63SDavid du Colombier 		break;
147*8ccd4a63SDavid du Colombier 
148*8ccd4a63SDavid du Colombier 	case Rauth:
149*8ccd4a63SDavid du Colombier 		n += QIDSZ;
150*8ccd4a63SDavid du Colombier 		break;
151*8ccd4a63SDavid du Colombier 
152*8ccd4a63SDavid du Colombier 	case Rattach:
153*8ccd4a63SDavid du Colombier 		n += QIDSZ;
154*8ccd4a63SDavid du Colombier 		break;
155*8ccd4a63SDavid du Colombier 
156*8ccd4a63SDavid du Colombier 	case Rwalk:
157*8ccd4a63SDavid du Colombier 		n += BIT16SZ;
158*8ccd4a63SDavid du Colombier 		n += f->nwqid*QIDSZ;
159*8ccd4a63SDavid du Colombier 		break;
160*8ccd4a63SDavid du Colombier 
161*8ccd4a63SDavid du Colombier 	case Ropen:
162*8ccd4a63SDavid du Colombier 	case Rcreate:
163*8ccd4a63SDavid du Colombier 		n += QIDSZ;
164*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
165*8ccd4a63SDavid du Colombier 		break;
166*8ccd4a63SDavid du Colombier 
167*8ccd4a63SDavid du Colombier 	case Rread:
168*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
169*8ccd4a63SDavid du Colombier 		n += f->count;
170*8ccd4a63SDavid du Colombier 		break;
171*8ccd4a63SDavid du Colombier 
172*8ccd4a63SDavid du Colombier 	case Rwrite:
173*8ccd4a63SDavid du Colombier 		n += BIT32SZ;
174*8ccd4a63SDavid du Colombier 		break;
175*8ccd4a63SDavid du Colombier 
176*8ccd4a63SDavid du Colombier 	case Rclunk:
177*8ccd4a63SDavid du Colombier 		break;
178*8ccd4a63SDavid du Colombier 
179*8ccd4a63SDavid du Colombier 	case Rremove:
180*8ccd4a63SDavid du Colombier 		break;
181*8ccd4a63SDavid du Colombier 
182*8ccd4a63SDavid du Colombier 	case Rstat:
183*8ccd4a63SDavid du Colombier 		n += BIT16SZ;
184*8ccd4a63SDavid du Colombier 		n += f->nstat;
185*8ccd4a63SDavid du Colombier 		break;
186*8ccd4a63SDavid du Colombier 
187*8ccd4a63SDavid du Colombier 	case Rwstat:
188*8ccd4a63SDavid du Colombier 		break;
189*8ccd4a63SDavid du Colombier 	}
190*8ccd4a63SDavid du Colombier 	return n;
191*8ccd4a63SDavid du Colombier }
192*8ccd4a63SDavid du Colombier 
193*8ccd4a63SDavid du Colombier uint
convS2M(Fcall * f,uchar * ap,uint nap)194*8ccd4a63SDavid du Colombier convS2M(Fcall *f, uchar *ap, uint nap)
195*8ccd4a63SDavid du Colombier {
196*8ccd4a63SDavid du Colombier 	uchar *p;
197*8ccd4a63SDavid du Colombier 	uint i, size;
198*8ccd4a63SDavid du Colombier 
199*8ccd4a63SDavid du Colombier 	size = sizeS2M(f);
200*8ccd4a63SDavid du Colombier 	if(size == 0)
201*8ccd4a63SDavid du Colombier 		return 0;
202*8ccd4a63SDavid du Colombier 	if(size > nap)
203*8ccd4a63SDavid du Colombier 		return 0;
204*8ccd4a63SDavid du Colombier 
205*8ccd4a63SDavid du Colombier 	p = (uchar*)ap;
206*8ccd4a63SDavid du Colombier 
207*8ccd4a63SDavid du Colombier 	PBIT32(p, size);
208*8ccd4a63SDavid du Colombier 	p += BIT32SZ;
209*8ccd4a63SDavid du Colombier 	PBIT8(p, f->type);
210*8ccd4a63SDavid du Colombier 	p += BIT8SZ;
211*8ccd4a63SDavid du Colombier 	PBIT16(p, f->tag);
212*8ccd4a63SDavid du Colombier 	p += BIT16SZ;
213*8ccd4a63SDavid du Colombier 
214*8ccd4a63SDavid du Colombier 	switch(f->type)
215*8ccd4a63SDavid du Colombier 	{
216*8ccd4a63SDavid du Colombier 	default:
217*8ccd4a63SDavid du Colombier 		return 0;
218*8ccd4a63SDavid du Colombier 
219*8ccd4a63SDavid du Colombier 	case Tversion:
220*8ccd4a63SDavid du Colombier 		PBIT32(p, f->msize);
221*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
222*8ccd4a63SDavid du Colombier 		p = pstring(p, f->version);
223*8ccd4a63SDavid du Colombier 		break;
224*8ccd4a63SDavid du Colombier 
225*8ccd4a63SDavid du Colombier 	case Tflush:
226*8ccd4a63SDavid du Colombier 		PBIT16(p, f->oldtag);
227*8ccd4a63SDavid du Colombier 		p += BIT16SZ;
228*8ccd4a63SDavid du Colombier 		break;
229*8ccd4a63SDavid du Colombier 
230*8ccd4a63SDavid du Colombier 	case Tauth:
231*8ccd4a63SDavid du Colombier 		PBIT32(p, f->afid);
232*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
233*8ccd4a63SDavid du Colombier 		p  = pstring(p, f->uname);
234*8ccd4a63SDavid du Colombier 		p  = pstring(p, f->aname);
235*8ccd4a63SDavid du Colombier 		break;
236*8ccd4a63SDavid du Colombier 
237*8ccd4a63SDavid du Colombier 	case Tattach:
238*8ccd4a63SDavid du Colombier 		PBIT32(p, f->fid);
239*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
240*8ccd4a63SDavid du Colombier 		PBIT32(p, f->afid);
241*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
242*8ccd4a63SDavid du Colombier 		p  = pstring(p, f->uname);
243*8ccd4a63SDavid du Colombier 		p  = pstring(p, f->aname);
244*8ccd4a63SDavid du Colombier 		break;
245*8ccd4a63SDavid du Colombier 
246*8ccd4a63SDavid du Colombier 	case Twalk:
247*8ccd4a63SDavid du Colombier 		PBIT32(p, f->fid);
248*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
249*8ccd4a63SDavid du Colombier 		PBIT32(p, f->newfid);
250*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
251*8ccd4a63SDavid du Colombier 		PBIT16(p, f->nwname);
252*8ccd4a63SDavid du Colombier 		p += BIT16SZ;
253*8ccd4a63SDavid du Colombier 		if(f->nwname > MAXWELEM)
254*8ccd4a63SDavid du Colombier 			return 0;
255*8ccd4a63SDavid du Colombier 		for(i=0; i<f->nwname; i++)
256*8ccd4a63SDavid du Colombier 			p = pstring(p, f->wname[i]);
257*8ccd4a63SDavid du Colombier 		break;
258*8ccd4a63SDavid du Colombier 
259*8ccd4a63SDavid du Colombier 	case Topen:
260*8ccd4a63SDavid du Colombier 		PBIT32(p, f->fid);
261*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
262*8ccd4a63SDavid du Colombier 		PBIT8(p, f->mode);
263*8ccd4a63SDavid du Colombier 		p += BIT8SZ;
264*8ccd4a63SDavid du Colombier 		break;
265*8ccd4a63SDavid du Colombier 
266*8ccd4a63SDavid du Colombier 	case Tcreate:
267*8ccd4a63SDavid du Colombier 		PBIT32(p, f->fid);
268*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
269*8ccd4a63SDavid du Colombier 		p = pstring(p, f->name);
270*8ccd4a63SDavid du Colombier 		PBIT32(p, f->perm);
271*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
272*8ccd4a63SDavid du Colombier 		PBIT8(p, f->mode);
273*8ccd4a63SDavid du Colombier 		p += BIT8SZ;
274*8ccd4a63SDavid du Colombier 		break;
275*8ccd4a63SDavid du Colombier 
276*8ccd4a63SDavid du Colombier 	case Tread:
277*8ccd4a63SDavid du Colombier 		PBIT32(p, f->fid);
278*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
279*8ccd4a63SDavid du Colombier 		PBIT64(p, f->offset);
280*8ccd4a63SDavid du Colombier 		p += BIT64SZ;
281*8ccd4a63SDavid du Colombier 		PBIT32(p, f->count);
282*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
283*8ccd4a63SDavid du Colombier 		break;
284*8ccd4a63SDavid du Colombier 
285*8ccd4a63SDavid du Colombier 	case Twrite:
286*8ccd4a63SDavid du Colombier 		PBIT32(p, f->fid);
287*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
288*8ccd4a63SDavid du Colombier 		PBIT64(p, f->offset);
289*8ccd4a63SDavid du Colombier 		p += BIT64SZ;
290*8ccd4a63SDavid du Colombier 		PBIT32(p, f->count);
291*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
292*8ccd4a63SDavid du Colombier 		memmove(p, f->data, f->count);
293*8ccd4a63SDavid du Colombier 		p += f->count;
294*8ccd4a63SDavid du Colombier 		break;
295*8ccd4a63SDavid du Colombier 
296*8ccd4a63SDavid du Colombier 	case Tclunk:
297*8ccd4a63SDavid du Colombier 	case Tremove:
298*8ccd4a63SDavid du Colombier 		PBIT32(p, f->fid);
299*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
300*8ccd4a63SDavid du Colombier 		break;
301*8ccd4a63SDavid du Colombier 
302*8ccd4a63SDavid du Colombier 	case Tstat:
303*8ccd4a63SDavid du Colombier 		PBIT32(p, f->fid);
304*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
305*8ccd4a63SDavid du Colombier 		break;
306*8ccd4a63SDavid du Colombier 
307*8ccd4a63SDavid du Colombier 	case Twstat:
308*8ccd4a63SDavid du Colombier 		PBIT32(p, f->fid);
309*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
310*8ccd4a63SDavid du Colombier 		PBIT16(p, f->nstat);
311*8ccd4a63SDavid du Colombier 		p += BIT16SZ;
312*8ccd4a63SDavid du Colombier 		memmove(p, f->stat, f->nstat);
313*8ccd4a63SDavid du Colombier 		p += f->nstat;
314*8ccd4a63SDavid du Colombier 		break;
315*8ccd4a63SDavid du Colombier /*
316*8ccd4a63SDavid du Colombier  */
317*8ccd4a63SDavid du Colombier 
318*8ccd4a63SDavid du Colombier 	case Rversion:
319*8ccd4a63SDavid du Colombier 		PBIT32(p, f->msize);
320*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
321*8ccd4a63SDavid du Colombier 		p = pstring(p, f->version);
322*8ccd4a63SDavid du Colombier 		break;
323*8ccd4a63SDavid du Colombier 
324*8ccd4a63SDavid du Colombier 	case Rerror:
325*8ccd4a63SDavid du Colombier 		p = pstring(p, f->ename);
326*8ccd4a63SDavid du Colombier 		break;
327*8ccd4a63SDavid du Colombier 
328*8ccd4a63SDavid du Colombier 	case Rflush:
329*8ccd4a63SDavid du Colombier 		break;
330*8ccd4a63SDavid du Colombier 
331*8ccd4a63SDavid du Colombier 	case Rauth:
332*8ccd4a63SDavid du Colombier 		p = pqid(p, &f->aqid);
333*8ccd4a63SDavid du Colombier 		break;
334*8ccd4a63SDavid du Colombier 
335*8ccd4a63SDavid du Colombier 	case Rattach:
336*8ccd4a63SDavid du Colombier 		p = pqid(p, &f->qid);
337*8ccd4a63SDavid du Colombier 		break;
338*8ccd4a63SDavid du Colombier 
339*8ccd4a63SDavid du Colombier 	case Rwalk:
340*8ccd4a63SDavid du Colombier 		PBIT16(p, f->nwqid);
341*8ccd4a63SDavid du Colombier 		p += BIT16SZ;
342*8ccd4a63SDavid du Colombier 		if(f->nwqid > MAXWELEM)
343*8ccd4a63SDavid du Colombier 			return 0;
344*8ccd4a63SDavid du Colombier 		for(i=0; i<f->nwqid; i++)
345*8ccd4a63SDavid du Colombier 			p = pqid(p, &f->wqid[i]);
346*8ccd4a63SDavid du Colombier 		break;
347*8ccd4a63SDavid du Colombier 
348*8ccd4a63SDavid du Colombier 	case Ropen:
349*8ccd4a63SDavid du Colombier 	case Rcreate:
350*8ccd4a63SDavid du Colombier 		p = pqid(p, &f->qid);
351*8ccd4a63SDavid du Colombier 		PBIT32(p, f->iounit);
352*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
353*8ccd4a63SDavid du Colombier 		break;
354*8ccd4a63SDavid du Colombier 
355*8ccd4a63SDavid du Colombier 	case Rread:
356*8ccd4a63SDavid du Colombier 		PBIT32(p, f->count);
357*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
358*8ccd4a63SDavid du Colombier 		memmove(p, f->data, f->count);
359*8ccd4a63SDavid du Colombier 		p += f->count;
360*8ccd4a63SDavid du Colombier 		break;
361*8ccd4a63SDavid du Colombier 
362*8ccd4a63SDavid du Colombier 	case Rwrite:
363*8ccd4a63SDavid du Colombier 		PBIT32(p, f->count);
364*8ccd4a63SDavid du Colombier 		p += BIT32SZ;
365*8ccd4a63SDavid du Colombier 		break;
366*8ccd4a63SDavid du Colombier 
367*8ccd4a63SDavid du Colombier 	case Rclunk:
368*8ccd4a63SDavid du Colombier 		break;
369*8ccd4a63SDavid du Colombier 
370*8ccd4a63SDavid du Colombier 	case Rremove:
371*8ccd4a63SDavid du Colombier 		break;
372*8ccd4a63SDavid du Colombier 
373*8ccd4a63SDavid du Colombier 	case Rstat:
374*8ccd4a63SDavid du Colombier 		PBIT16(p, f->nstat);
375*8ccd4a63SDavid du Colombier 		p += BIT16SZ;
376*8ccd4a63SDavid du Colombier 		memmove(p, f->stat, f->nstat);
377*8ccd4a63SDavid du Colombier 		p += f->nstat;
378*8ccd4a63SDavid du Colombier 		break;
379*8ccd4a63SDavid du Colombier 
380*8ccd4a63SDavid du Colombier 	case Rwstat:
381*8ccd4a63SDavid du Colombier 		break;
382*8ccd4a63SDavid du Colombier 	}
383*8ccd4a63SDavid du Colombier 	if(size != p-ap)
384*8ccd4a63SDavid du Colombier 		return 0;
385*8ccd4a63SDavid du Colombier 	return size;
386*8ccd4a63SDavid du Colombier }
387