1 d3df3087 2003-12-06 devnull #include <u.h>
2 d3df3087 2003-12-06 devnull #include <libc.h>
3 d3df3087 2003-12-06 devnull #include <fcall.h>
7 d3df3087 2003-12-06 devnull pstring(uchar *p, char *s)
11 d3df3087 2003-12-06 devnull if(s == nil){
12 d3df3087 2003-12-06 devnull PBIT16(p, 0);
13 d3df3087 2003-12-06 devnull p += BIT16SZ;
14 d3df3087 2003-12-06 devnull return p;
17 d3df3087 2003-12-06 devnull n = strlen(s);
18 d3df3087 2003-12-06 devnull PBIT16(p, n);
19 d3df3087 2003-12-06 devnull p += BIT16SZ;
20 d3df3087 2003-12-06 devnull memmove(p, s, n);
22 d3df3087 2003-12-06 devnull return p;
27 d3df3087 2003-12-06 devnull pqid(uchar *p, Qid *q)
29 d3df3087 2003-12-06 devnull PBIT8(p, q->type);
30 d3df3087 2003-12-06 devnull p += BIT8SZ;
31 d3df3087 2003-12-06 devnull PBIT32(p, q->vers);
32 d3df3087 2003-12-06 devnull p += BIT32SZ;
33 d3df3087 2003-12-06 devnull PBIT64(p, q->path);
34 d3df3087 2003-12-06 devnull p += BIT64SZ;
35 d3df3087 2003-12-06 devnull return p;
40 d3df3087 2003-12-06 devnull stringsz(char *s)
42 d3df3087 2003-12-06 devnull if(s == nil)
43 d3df3087 2003-12-06 devnull return BIT16SZ;
45 d3df3087 2003-12-06 devnull return BIT16SZ+strlen(s);
49 fb941e08 2005-09-13 devnull sizeS2Mu(Fcall *f, int dotu)
55 d3df3087 2003-12-06 devnull n += BIT32SZ; /* size */
56 d3df3087 2003-12-06 devnull n += BIT8SZ; /* type */
57 d3df3087 2003-12-06 devnull n += BIT16SZ; /* tag */
59 d3df3087 2003-12-06 devnull switch(f->type)
62 d3df3087 2003-12-06 devnull return 0;
64 d3df3087 2003-12-06 devnull case Tversion:
65 d3df3087 2003-12-06 devnull n += BIT32SZ;
66 d3df3087 2003-12-06 devnull n += stringsz(f->version);
69 d3df3087 2003-12-06 devnull case Tflush:
70 d3df3087 2003-12-06 devnull n += BIT16SZ;
73 d3df3087 2003-12-06 devnull case Tauth:
74 d3df3087 2003-12-06 devnull n += BIT32SZ;
75 d3df3087 2003-12-06 devnull n += stringsz(f->uname);
76 d3df3087 2003-12-06 devnull n += stringsz(f->aname);
77 8ff457f5 2009-08-20 tim.newsh if(dotu)
78 8ff457f5 2009-08-20 tim.newsh n += BIT32SZ;
81 d3df3087 2003-12-06 devnull case Tattach:
82 d3df3087 2003-12-06 devnull n += BIT32SZ;
83 d3df3087 2003-12-06 devnull n += BIT32SZ;
84 d3df3087 2003-12-06 devnull n += stringsz(f->uname);
85 d3df3087 2003-12-06 devnull n += stringsz(f->aname);
86 8ff457f5 2009-08-20 tim.newsh if(dotu)
87 8ff457f5 2009-08-20 tim.newsh n += BIT32SZ;
90 d3df3087 2003-12-06 devnull case Twalk:
91 d3df3087 2003-12-06 devnull n += BIT32SZ;
92 d3df3087 2003-12-06 devnull n += BIT32SZ;
93 d3df3087 2003-12-06 devnull n += BIT16SZ;
94 d3df3087 2003-12-06 devnull for(i=0; i<f->nwname; i++)
95 d3df3087 2003-12-06 devnull n += stringsz(f->wname[i]);
98 d3df3087 2003-12-06 devnull case Topen:
99 32f69c36 2003-12-11 devnull case Topenfd:
100 d3df3087 2003-12-06 devnull n += BIT32SZ;
101 d3df3087 2003-12-06 devnull n += BIT8SZ;
104 d3df3087 2003-12-06 devnull case Tcreate:
105 d3df3087 2003-12-06 devnull n += BIT32SZ;
106 d3df3087 2003-12-06 devnull n += stringsz(f->name);
107 d3df3087 2003-12-06 devnull n += BIT32SZ;
108 d3df3087 2003-12-06 devnull n += BIT8SZ;
109 b5c7be2f 2006-03-03 devnull if(dotu)
110 b5c7be2f 2006-03-03 devnull n += stringsz(f->extension);
113 d3df3087 2003-12-06 devnull case Tread:
114 d3df3087 2003-12-06 devnull n += BIT32SZ;
115 d3df3087 2003-12-06 devnull n += BIT64SZ;
116 d3df3087 2003-12-06 devnull n += BIT32SZ;
119 d3df3087 2003-12-06 devnull case Twrite:
120 d3df3087 2003-12-06 devnull n += BIT32SZ;
121 d3df3087 2003-12-06 devnull n += BIT64SZ;
122 d3df3087 2003-12-06 devnull n += BIT32SZ;
123 d3df3087 2003-12-06 devnull n += f->count;
126 d3df3087 2003-12-06 devnull case Tclunk:
127 d3df3087 2003-12-06 devnull case Tremove:
128 d3df3087 2003-12-06 devnull n += BIT32SZ;
131 d3df3087 2003-12-06 devnull case Tstat:
132 d3df3087 2003-12-06 devnull n += BIT32SZ;
135 d3df3087 2003-12-06 devnull case Twstat:
136 d3df3087 2003-12-06 devnull n += BIT32SZ;
137 d3df3087 2003-12-06 devnull n += BIT16SZ;
138 d3df3087 2003-12-06 devnull n += f->nstat;
143 d3df3087 2003-12-06 devnull case Rversion:
144 d3df3087 2003-12-06 devnull n += BIT32SZ;
145 d3df3087 2003-12-06 devnull n += stringsz(f->version);
148 d3df3087 2003-12-06 devnull case Rerror:
149 d3df3087 2003-12-06 devnull n += stringsz(f->ename);
150 fb941e08 2005-09-13 devnull if(dotu)
151 8ff457f5 2009-08-20 tim.newsh n += BIT32SZ;
154 d3df3087 2003-12-06 devnull case Rflush:
157 d3df3087 2003-12-06 devnull case Rauth:
158 d3df3087 2003-12-06 devnull n += QIDSZ;
161 d3df3087 2003-12-06 devnull case Rattach:
162 d3df3087 2003-12-06 devnull n += QIDSZ;
165 d3df3087 2003-12-06 devnull case Rwalk:
166 d3df3087 2003-12-06 devnull n += BIT16SZ;
167 d3df3087 2003-12-06 devnull n += f->nwqid*QIDSZ;
170 d3df3087 2003-12-06 devnull case Ropen:
171 d3df3087 2003-12-06 devnull case Rcreate:
172 d3df3087 2003-12-06 devnull n += QIDSZ;
173 d3df3087 2003-12-06 devnull n += BIT32SZ;
176 32f69c36 2003-12-11 devnull case Ropenfd:
177 32f69c36 2003-12-11 devnull n += QIDSZ;
178 32f69c36 2003-12-11 devnull n += BIT32SZ;
179 32f69c36 2003-12-11 devnull n += BIT32SZ;
182 d3df3087 2003-12-06 devnull case Rread:
183 d3df3087 2003-12-06 devnull n += BIT32SZ;
184 d3df3087 2003-12-06 devnull n += f->count;
187 d3df3087 2003-12-06 devnull case Rwrite:
188 d3df3087 2003-12-06 devnull n += BIT32SZ;
191 d3df3087 2003-12-06 devnull case Rclunk:
194 d3df3087 2003-12-06 devnull case Rremove:
197 d3df3087 2003-12-06 devnull case Rstat:
198 d3df3087 2003-12-06 devnull n += BIT16SZ;
199 d3df3087 2003-12-06 devnull n += f->nstat;
202 d3df3087 2003-12-06 devnull case Rwstat:
205 d3df3087 2003-12-06 devnull return n;
209 fb941e08 2005-09-13 devnull sizeS2M(Fcall *f)
211 fb941e08 2005-09-13 devnull return sizeS2Mu(f, 0);
215 fb941e08 2005-09-13 devnull convS2Mu(Fcall *f, uchar *ap, uint nap, int dotu)
217 d3df3087 2003-12-06 devnull uchar *p;
218 d3df3087 2003-12-06 devnull uint i, size;
220 9e2f1d9b 2005-11-21 devnull size = sizeS2Mu(f, dotu);
221 d3df3087 2003-12-06 devnull if(size == 0)
222 d3df3087 2003-12-06 devnull return 0;
223 d3df3087 2003-12-06 devnull if(size > nap)
224 d3df3087 2003-12-06 devnull return 0;
226 d3df3087 2003-12-06 devnull p = (uchar*)ap;
228 d3df3087 2003-12-06 devnull PBIT32(p, size);
229 d3df3087 2003-12-06 devnull p += BIT32SZ;
230 d3df3087 2003-12-06 devnull PBIT8(p, f->type);
231 d3df3087 2003-12-06 devnull p += BIT8SZ;
232 d3df3087 2003-12-06 devnull PBIT16(p, f->tag);
233 d3df3087 2003-12-06 devnull p += BIT16SZ;
235 d3df3087 2003-12-06 devnull switch(f->type)
237 d3df3087 2003-12-06 devnull default:
238 d3df3087 2003-12-06 devnull return 0;
240 d3df3087 2003-12-06 devnull case Tversion:
241 d3df3087 2003-12-06 devnull PBIT32(p, f->msize);
242 d3df3087 2003-12-06 devnull p += BIT32SZ;
243 d3df3087 2003-12-06 devnull p = pstring(p, f->version);
246 d3df3087 2003-12-06 devnull case Tflush:
247 d3df3087 2003-12-06 devnull PBIT16(p, f->oldtag);
248 d3df3087 2003-12-06 devnull p += BIT16SZ;
251 d3df3087 2003-12-06 devnull case Tauth:
252 d3df3087 2003-12-06 devnull PBIT32(p, f->afid);
253 d3df3087 2003-12-06 devnull p += BIT32SZ;
254 d3df3087 2003-12-06 devnull p = pstring(p, f->uname);
255 d3df3087 2003-12-06 devnull p = pstring(p, f->aname);
256 8ff457f5 2009-08-20 tim.newsh if(dotu){
257 8ff457f5 2009-08-20 tim.newsh f->uidnum = NOUID;
258 8ff457f5 2009-08-20 tim.newsh PBIT32(p, f->uidnum);
259 8ff457f5 2009-08-20 tim.newsh p += BIT32SZ;
263 d3df3087 2003-12-06 devnull case Tattach:
264 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
265 d3df3087 2003-12-06 devnull p += BIT32SZ;
266 d3df3087 2003-12-06 devnull PBIT32(p, f->afid);
267 d3df3087 2003-12-06 devnull p += BIT32SZ;
268 d3df3087 2003-12-06 devnull p = pstring(p, f->uname);
269 d3df3087 2003-12-06 devnull p = pstring(p, f->aname);
270 8ff457f5 2009-08-20 tim.newsh if(dotu){
271 8ff457f5 2009-08-20 tim.newsh f->uidnum = NOUID;
272 8ff457f5 2009-08-20 tim.newsh PBIT32(p, f->uidnum);
273 8ff457f5 2009-08-20 tim.newsh p += BIT32SZ;
277 d3df3087 2003-12-06 devnull case Twalk:
278 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
279 d3df3087 2003-12-06 devnull p += BIT32SZ;
280 d3df3087 2003-12-06 devnull PBIT32(p, f->newfid);
281 d3df3087 2003-12-06 devnull p += BIT32SZ;
282 d3df3087 2003-12-06 devnull PBIT16(p, f->nwname);
283 d3df3087 2003-12-06 devnull p += BIT16SZ;
284 d3df3087 2003-12-06 devnull if(f->nwname > MAXWELEM)
285 d3df3087 2003-12-06 devnull return 0;
286 d3df3087 2003-12-06 devnull for(i=0; i<f->nwname; i++)
287 d3df3087 2003-12-06 devnull p = pstring(p, f->wname[i]);
290 d3df3087 2003-12-06 devnull case Topen:
291 32f69c36 2003-12-11 devnull case Topenfd:
292 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
293 d3df3087 2003-12-06 devnull p += BIT32SZ;
294 d3df3087 2003-12-06 devnull PBIT8(p, f->mode);
295 d3df3087 2003-12-06 devnull p += BIT8SZ;
298 d3df3087 2003-12-06 devnull case Tcreate:
299 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
300 d3df3087 2003-12-06 devnull p += BIT32SZ;
301 d3df3087 2003-12-06 devnull p = pstring(p, f->name);
302 d3df3087 2003-12-06 devnull PBIT32(p, f->perm);
303 d3df3087 2003-12-06 devnull p += BIT32SZ;
304 d3df3087 2003-12-06 devnull PBIT8(p, f->mode);
305 d3df3087 2003-12-06 devnull p += BIT8SZ;
306 b5c7be2f 2006-03-03 devnull if(dotu)
307 b5c7be2f 2006-03-03 devnull p = pstring(p, f->extension);
310 d3df3087 2003-12-06 devnull case Tread:
311 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
312 d3df3087 2003-12-06 devnull p += BIT32SZ;
313 d3df3087 2003-12-06 devnull PBIT64(p, f->offset);
314 d3df3087 2003-12-06 devnull p += BIT64SZ;
315 d3df3087 2003-12-06 devnull PBIT32(p, f->count);
316 d3df3087 2003-12-06 devnull p += BIT32SZ;
319 d3df3087 2003-12-06 devnull case Twrite:
320 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
321 d3df3087 2003-12-06 devnull p += BIT32SZ;
322 d3df3087 2003-12-06 devnull PBIT64(p, f->offset);
323 d3df3087 2003-12-06 devnull p += BIT64SZ;
324 d3df3087 2003-12-06 devnull PBIT32(p, f->count);
325 d3df3087 2003-12-06 devnull p += BIT32SZ;
326 d3df3087 2003-12-06 devnull memmove(p, f->data, f->count);
327 d3df3087 2003-12-06 devnull p += f->count;
330 d3df3087 2003-12-06 devnull case Tclunk:
331 d3df3087 2003-12-06 devnull case Tremove:
332 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
333 d3df3087 2003-12-06 devnull p += BIT32SZ;
336 d3df3087 2003-12-06 devnull case Tstat:
337 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
338 d3df3087 2003-12-06 devnull p += BIT32SZ;
341 d3df3087 2003-12-06 devnull case Twstat:
342 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
343 d3df3087 2003-12-06 devnull p += BIT32SZ;
344 d3df3087 2003-12-06 devnull PBIT16(p, f->nstat);
345 d3df3087 2003-12-06 devnull p += BIT16SZ;
346 d3df3087 2003-12-06 devnull memmove(p, f->stat, f->nstat);
347 d3df3087 2003-12-06 devnull p += f->nstat;
352 d3df3087 2003-12-06 devnull case Rversion:
353 d3df3087 2003-12-06 devnull PBIT32(p, f->msize);
354 d3df3087 2003-12-06 devnull p += BIT32SZ;
355 d3df3087 2003-12-06 devnull p = pstring(p, f->version);
358 d3df3087 2003-12-06 devnull case Rerror:
359 d3df3087 2003-12-06 devnull p = pstring(p, f->ename);
360 fb941e08 2005-09-13 devnull if(dotu){
361 8ff457f5 2009-08-20 tim.newsh PBIT32(p, f->errornum);
362 8ff457f5 2009-08-20 tim.newsh p += BIT32SZ;
366 d3df3087 2003-12-06 devnull case Rflush:
369 d3df3087 2003-12-06 devnull case Rauth:
370 d3df3087 2003-12-06 devnull p = pqid(p, &f->aqid);
373 d3df3087 2003-12-06 devnull case Rattach:
374 d3df3087 2003-12-06 devnull p = pqid(p, &f->qid);
377 d3df3087 2003-12-06 devnull case Rwalk:
378 d3df3087 2003-12-06 devnull PBIT16(p, f->nwqid);
379 d3df3087 2003-12-06 devnull p += BIT16SZ;
380 d3df3087 2003-12-06 devnull if(f->nwqid > MAXWELEM)
381 d3df3087 2003-12-06 devnull return 0;
382 d3df3087 2003-12-06 devnull for(i=0; i<f->nwqid; i++)
383 d3df3087 2003-12-06 devnull p = pqid(p, &f->wqid[i]);
386 d3df3087 2003-12-06 devnull case Ropen:
387 d3df3087 2003-12-06 devnull case Rcreate:
388 32f69c36 2003-12-11 devnull case Ropenfd:
389 d3df3087 2003-12-06 devnull p = pqid(p, &f->qid);
390 d3df3087 2003-12-06 devnull PBIT32(p, f->iounit);
391 d3df3087 2003-12-06 devnull p += BIT32SZ;
392 32f69c36 2003-12-11 devnull if(f->type == Ropenfd){
393 32f69c36 2003-12-11 devnull PBIT32(p, f->unixfd);
394 32f69c36 2003-12-11 devnull p += BIT32SZ;
398 d3df3087 2003-12-06 devnull case Rread:
399 d3df3087 2003-12-06 devnull PBIT32(p, f->count);
400 d3df3087 2003-12-06 devnull p += BIT32SZ;
401 d3df3087 2003-12-06 devnull memmove(p, f->data, f->count);
402 d3df3087 2003-12-06 devnull p += f->count;
405 d3df3087 2003-12-06 devnull case Rwrite:
406 d3df3087 2003-12-06 devnull PBIT32(p, f->count);
407 d3df3087 2003-12-06 devnull p += BIT32SZ;
410 d3df3087 2003-12-06 devnull case Rclunk:
413 d3df3087 2003-12-06 devnull case Rremove:
416 d3df3087 2003-12-06 devnull case Rstat:
417 d3df3087 2003-12-06 devnull PBIT16(p, f->nstat);
418 d3df3087 2003-12-06 devnull p += BIT16SZ;
419 d3df3087 2003-12-06 devnull memmove(p, f->stat, f->nstat);
420 d3df3087 2003-12-06 devnull p += f->nstat;
423 d3df3087 2003-12-06 devnull case Rwstat:
426 d3df3087 2003-12-06 devnull if(size != p-ap)
427 d3df3087 2003-12-06 devnull return 0;
428 d3df3087 2003-12-06 devnull return size;
432 fb941e08 2005-09-13 devnull convS2M(Fcall *f, uchar *ap, uint nap)
434 fb941e08 2005-09-13 devnull return convS2Mu(f, ap, nap, 0);