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