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);
79 d3df3087 2003-12-06 devnull case Tattach:
80 d3df3087 2003-12-06 devnull n += BIT32SZ;
81 d3df3087 2003-12-06 devnull n += BIT32SZ;
82 d3df3087 2003-12-06 devnull n += stringsz(f->uname);
83 d3df3087 2003-12-06 devnull n += stringsz(f->aname);
86 d3df3087 2003-12-06 devnull case Twalk:
87 d3df3087 2003-12-06 devnull n += BIT32SZ;
88 d3df3087 2003-12-06 devnull n += BIT32SZ;
89 d3df3087 2003-12-06 devnull n += BIT16SZ;
90 d3df3087 2003-12-06 devnull for(i=0; i<f->nwname; i++)
91 d3df3087 2003-12-06 devnull n += stringsz(f->wname[i]);
94 d3df3087 2003-12-06 devnull case Topen:
95 32f69c36 2003-12-11 devnull case Topenfd:
96 d3df3087 2003-12-06 devnull n += BIT32SZ;
97 d3df3087 2003-12-06 devnull n += BIT8SZ;
100 d3df3087 2003-12-06 devnull case Tcreate:
101 d3df3087 2003-12-06 devnull n += BIT32SZ;
102 d3df3087 2003-12-06 devnull n += stringsz(f->name);
103 d3df3087 2003-12-06 devnull n += BIT32SZ;
104 d3df3087 2003-12-06 devnull n += BIT8SZ;
107 d3df3087 2003-12-06 devnull case Tread:
108 d3df3087 2003-12-06 devnull n += BIT32SZ;
109 d3df3087 2003-12-06 devnull n += BIT64SZ;
110 d3df3087 2003-12-06 devnull n += BIT32SZ;
113 d3df3087 2003-12-06 devnull case Twrite:
114 d3df3087 2003-12-06 devnull n += BIT32SZ;
115 d3df3087 2003-12-06 devnull n += BIT64SZ;
116 d3df3087 2003-12-06 devnull n += BIT32SZ;
117 d3df3087 2003-12-06 devnull n += f->count;
120 d3df3087 2003-12-06 devnull case Tclunk:
121 d3df3087 2003-12-06 devnull case Tremove:
122 d3df3087 2003-12-06 devnull n += BIT32SZ;
125 d3df3087 2003-12-06 devnull case Tstat:
126 d3df3087 2003-12-06 devnull n += BIT32SZ;
129 d3df3087 2003-12-06 devnull case Twstat:
130 d3df3087 2003-12-06 devnull n += BIT32SZ;
131 d3df3087 2003-12-06 devnull n += BIT16SZ;
132 d3df3087 2003-12-06 devnull n += f->nstat;
137 d3df3087 2003-12-06 devnull case Rversion:
138 d3df3087 2003-12-06 devnull n += BIT32SZ;
139 d3df3087 2003-12-06 devnull n += stringsz(f->version);
142 d3df3087 2003-12-06 devnull case Rerror:
143 d3df3087 2003-12-06 devnull n += stringsz(f->ename);
144 fb941e08 2005-09-13 devnull if(dotu)
145 fb941e08 2005-09-13 devnull n += BIT16SZ;
148 d3df3087 2003-12-06 devnull case Rflush:
151 d3df3087 2003-12-06 devnull case Rauth:
152 d3df3087 2003-12-06 devnull n += QIDSZ;
155 d3df3087 2003-12-06 devnull case Rattach:
156 d3df3087 2003-12-06 devnull n += QIDSZ;
159 d3df3087 2003-12-06 devnull case Rwalk:
160 d3df3087 2003-12-06 devnull n += BIT16SZ;
161 d3df3087 2003-12-06 devnull n += f->nwqid*QIDSZ;
164 d3df3087 2003-12-06 devnull case Ropen:
165 d3df3087 2003-12-06 devnull case Rcreate:
166 d3df3087 2003-12-06 devnull n += QIDSZ;
167 d3df3087 2003-12-06 devnull n += BIT32SZ;
170 32f69c36 2003-12-11 devnull case Ropenfd:
171 32f69c36 2003-12-11 devnull n += QIDSZ;
172 32f69c36 2003-12-11 devnull n += BIT32SZ;
173 32f69c36 2003-12-11 devnull n += BIT32SZ;
176 d3df3087 2003-12-06 devnull case Rread:
177 d3df3087 2003-12-06 devnull n += BIT32SZ;
178 d3df3087 2003-12-06 devnull n += f->count;
181 d3df3087 2003-12-06 devnull case Rwrite:
182 d3df3087 2003-12-06 devnull n += BIT32SZ;
185 d3df3087 2003-12-06 devnull case Rclunk:
188 d3df3087 2003-12-06 devnull case Rremove:
191 d3df3087 2003-12-06 devnull case Rstat:
192 d3df3087 2003-12-06 devnull n += BIT16SZ;
193 d3df3087 2003-12-06 devnull n += f->nstat;
196 d3df3087 2003-12-06 devnull case Rwstat:
199 d3df3087 2003-12-06 devnull return n;
203 fb941e08 2005-09-13 devnull sizeS2M(Fcall *f)
205 fb941e08 2005-09-13 devnull return sizeS2Mu(f, 0);
209 fb941e08 2005-09-13 devnull convS2Mu(Fcall *f, uchar *ap, uint nap, int dotu)
211 d3df3087 2003-12-06 devnull uchar *p;
212 d3df3087 2003-12-06 devnull uint i, size;
214 9e2f1d9b 2005-11-21 devnull size = sizeS2Mu(f, dotu);
215 d3df3087 2003-12-06 devnull if(size == 0)
216 d3df3087 2003-12-06 devnull return 0;
217 d3df3087 2003-12-06 devnull if(size > nap)
218 d3df3087 2003-12-06 devnull return 0;
220 d3df3087 2003-12-06 devnull p = (uchar*)ap;
222 d3df3087 2003-12-06 devnull PBIT32(p, size);
223 d3df3087 2003-12-06 devnull p += BIT32SZ;
224 d3df3087 2003-12-06 devnull PBIT8(p, f->type);
225 d3df3087 2003-12-06 devnull p += BIT8SZ;
226 d3df3087 2003-12-06 devnull PBIT16(p, f->tag);
227 d3df3087 2003-12-06 devnull p += BIT16SZ;
229 d3df3087 2003-12-06 devnull switch(f->type)
231 d3df3087 2003-12-06 devnull default:
232 d3df3087 2003-12-06 devnull return 0;
234 d3df3087 2003-12-06 devnull case Tversion:
235 d3df3087 2003-12-06 devnull PBIT32(p, f->msize);
236 d3df3087 2003-12-06 devnull p += BIT32SZ;
237 d3df3087 2003-12-06 devnull p = pstring(p, f->version);
240 d3df3087 2003-12-06 devnull case Tflush:
241 d3df3087 2003-12-06 devnull PBIT16(p, f->oldtag);
242 d3df3087 2003-12-06 devnull p += BIT16SZ;
245 d3df3087 2003-12-06 devnull case Tauth:
246 d3df3087 2003-12-06 devnull PBIT32(p, f->afid);
247 d3df3087 2003-12-06 devnull p += BIT32SZ;
248 d3df3087 2003-12-06 devnull p = pstring(p, f->uname);
249 d3df3087 2003-12-06 devnull p = pstring(p, f->aname);
252 d3df3087 2003-12-06 devnull case Tattach:
253 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
254 d3df3087 2003-12-06 devnull p += BIT32SZ;
255 d3df3087 2003-12-06 devnull PBIT32(p, f->afid);
256 d3df3087 2003-12-06 devnull p += BIT32SZ;
257 d3df3087 2003-12-06 devnull p = pstring(p, f->uname);
258 d3df3087 2003-12-06 devnull p = pstring(p, f->aname);
261 d3df3087 2003-12-06 devnull case Twalk:
262 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
263 d3df3087 2003-12-06 devnull p += BIT32SZ;
264 d3df3087 2003-12-06 devnull PBIT32(p, f->newfid);
265 d3df3087 2003-12-06 devnull p += BIT32SZ;
266 d3df3087 2003-12-06 devnull PBIT16(p, f->nwname);
267 d3df3087 2003-12-06 devnull p += BIT16SZ;
268 d3df3087 2003-12-06 devnull if(f->nwname > MAXWELEM)
269 d3df3087 2003-12-06 devnull return 0;
270 d3df3087 2003-12-06 devnull for(i=0; i<f->nwname; i++)
271 d3df3087 2003-12-06 devnull p = pstring(p, f->wname[i]);
274 d3df3087 2003-12-06 devnull case Topen:
275 32f69c36 2003-12-11 devnull case Topenfd:
276 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
277 d3df3087 2003-12-06 devnull p += BIT32SZ;
278 d3df3087 2003-12-06 devnull PBIT8(p, f->mode);
279 d3df3087 2003-12-06 devnull p += BIT8SZ;
282 d3df3087 2003-12-06 devnull case Tcreate:
283 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
284 d3df3087 2003-12-06 devnull p += BIT32SZ;
285 d3df3087 2003-12-06 devnull p = pstring(p, f->name);
286 d3df3087 2003-12-06 devnull PBIT32(p, f->perm);
287 d3df3087 2003-12-06 devnull p += BIT32SZ;
288 d3df3087 2003-12-06 devnull PBIT8(p, f->mode);
289 d3df3087 2003-12-06 devnull p += BIT8SZ;
292 d3df3087 2003-12-06 devnull case Tread:
293 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
294 d3df3087 2003-12-06 devnull p += BIT32SZ;
295 d3df3087 2003-12-06 devnull PBIT64(p, f->offset);
296 d3df3087 2003-12-06 devnull p += BIT64SZ;
297 d3df3087 2003-12-06 devnull PBIT32(p, f->count);
298 d3df3087 2003-12-06 devnull p += BIT32SZ;
301 d3df3087 2003-12-06 devnull case Twrite:
302 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
303 d3df3087 2003-12-06 devnull p += BIT32SZ;
304 d3df3087 2003-12-06 devnull PBIT64(p, f->offset);
305 d3df3087 2003-12-06 devnull p += BIT64SZ;
306 d3df3087 2003-12-06 devnull PBIT32(p, f->count);
307 d3df3087 2003-12-06 devnull p += BIT32SZ;
308 d3df3087 2003-12-06 devnull memmove(p, f->data, f->count);
309 d3df3087 2003-12-06 devnull p += f->count;
312 d3df3087 2003-12-06 devnull case Tclunk:
313 d3df3087 2003-12-06 devnull case Tremove:
314 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
315 d3df3087 2003-12-06 devnull p += BIT32SZ;
318 d3df3087 2003-12-06 devnull case Tstat:
319 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
320 d3df3087 2003-12-06 devnull p += BIT32SZ;
323 d3df3087 2003-12-06 devnull case Twstat:
324 d3df3087 2003-12-06 devnull PBIT32(p, f->fid);
325 d3df3087 2003-12-06 devnull p += BIT32SZ;
326 d3df3087 2003-12-06 devnull PBIT16(p, f->nstat);
327 d3df3087 2003-12-06 devnull p += BIT16SZ;
328 d3df3087 2003-12-06 devnull memmove(p, f->stat, f->nstat);
329 d3df3087 2003-12-06 devnull p += f->nstat;
334 d3df3087 2003-12-06 devnull case Rversion:
335 d3df3087 2003-12-06 devnull PBIT32(p, f->msize);
336 d3df3087 2003-12-06 devnull p += BIT32SZ;
337 d3df3087 2003-12-06 devnull p = pstring(p, f->version);
340 d3df3087 2003-12-06 devnull case Rerror:
341 d3df3087 2003-12-06 devnull p = pstring(p, f->ename);
342 fb941e08 2005-09-13 devnull if(dotu){
343 fb941e08 2005-09-13 devnull PBIT16(p, f->errornum);
344 fb941e08 2005-09-13 devnull p += BIT16SZ;
348 d3df3087 2003-12-06 devnull case Rflush:
351 d3df3087 2003-12-06 devnull case Rauth:
352 d3df3087 2003-12-06 devnull p = pqid(p, &f->aqid);
355 d3df3087 2003-12-06 devnull case Rattach:
356 d3df3087 2003-12-06 devnull p = pqid(p, &f->qid);
359 d3df3087 2003-12-06 devnull case Rwalk:
360 d3df3087 2003-12-06 devnull PBIT16(p, f->nwqid);
361 d3df3087 2003-12-06 devnull p += BIT16SZ;
362 d3df3087 2003-12-06 devnull if(f->nwqid > MAXWELEM)
363 d3df3087 2003-12-06 devnull return 0;
364 d3df3087 2003-12-06 devnull for(i=0; i<f->nwqid; i++)
365 d3df3087 2003-12-06 devnull p = pqid(p, &f->wqid[i]);
368 d3df3087 2003-12-06 devnull case Ropen:
369 d3df3087 2003-12-06 devnull case Rcreate:
370 32f69c36 2003-12-11 devnull case Ropenfd:
371 d3df3087 2003-12-06 devnull p = pqid(p, &f->qid);
372 d3df3087 2003-12-06 devnull PBIT32(p, f->iounit);
373 d3df3087 2003-12-06 devnull p += BIT32SZ;
374 32f69c36 2003-12-11 devnull if(f->type == Ropenfd){
375 32f69c36 2003-12-11 devnull PBIT32(p, f->unixfd);
376 32f69c36 2003-12-11 devnull p += BIT32SZ;
380 d3df3087 2003-12-06 devnull case Rread:
381 d3df3087 2003-12-06 devnull PBIT32(p, f->count);
382 d3df3087 2003-12-06 devnull p += BIT32SZ;
383 d3df3087 2003-12-06 devnull memmove(p, f->data, f->count);
384 d3df3087 2003-12-06 devnull p += f->count;
387 d3df3087 2003-12-06 devnull case Rwrite:
388 d3df3087 2003-12-06 devnull PBIT32(p, f->count);
389 d3df3087 2003-12-06 devnull p += BIT32SZ;
392 d3df3087 2003-12-06 devnull case Rclunk:
395 d3df3087 2003-12-06 devnull case Rremove:
398 d3df3087 2003-12-06 devnull case Rstat:
399 d3df3087 2003-12-06 devnull PBIT16(p, f->nstat);
400 d3df3087 2003-12-06 devnull p += BIT16SZ;
401 d3df3087 2003-12-06 devnull memmove(p, f->stat, f->nstat);
402 d3df3087 2003-12-06 devnull p += f->nstat;
405 d3df3087 2003-12-06 devnull case Rwstat:
408 d3df3087 2003-12-06 devnull if(size != p-ap)
409 d3df3087 2003-12-06 devnull return 0;
410 d3df3087 2003-12-06 devnull return size;
414 fb941e08 2005-09-13 devnull convS2M(Fcall *f, uchar *ap, uint nap)
416 fb941e08 2005-09-13 devnull return convS2Mu(f, ap, nap, 0);