1 /*
2 * SUN NFSv3 Mounter. See RFC 1813
3 */
4
5 #include <u.h>
6 #include <libc.h>
7 #include <thread.h>
8 #include <sunrpc.h>
9 #include <nfs3.h>
10
11 void
nfsMount3TNullPrint(Fmt * fmt,NfsMount3TNull * x)12 nfsMount3TNullPrint(Fmt *fmt, NfsMount3TNull *x)
13 {
14 USED(x);
15 fmtprint(fmt, "%s\n", "NfsMount3TNull");
16 }
17 uint
nfsMount3TNullSize(NfsMount3TNull * x)18 nfsMount3TNullSize(NfsMount3TNull *x)
19 {
20 uint a;
21 USED(x);
22 a = 0;
23 return a;
24 }
25 int
nfsMount3TNullPack(uchar * a,uchar * ea,uchar ** pa,NfsMount3TNull * x)26 nfsMount3TNullPack(uchar *a, uchar *ea, uchar **pa, NfsMount3TNull *x)
27 {
28 USED(ea);
29 USED(x);
30 *pa = a;
31 return 0;
32 }
33 int
nfsMount3TNullUnpack(uchar * a,uchar * ea,uchar ** pa,NfsMount3TNull * x)34 nfsMount3TNullUnpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TNull *x)
35 {
36 USED(ea);
37 USED(x);
38 *pa = a;
39 return 0;
40 }
41 void
nfsMount3RNullPrint(Fmt * fmt,NfsMount3RNull * x)42 nfsMount3RNullPrint(Fmt *fmt, NfsMount3RNull *x)
43 {
44 USED(x);
45 fmtprint(fmt, "%s\n", "NfsMount3RNull");
46 }
47 uint
nfsMount3RNullSize(NfsMount3RNull * x)48 nfsMount3RNullSize(NfsMount3RNull *x)
49 {
50 uint a;
51 USED(x);
52 a = 0;
53 return a;
54 }
55 int
nfsMount3RNullPack(uchar * a,uchar * ea,uchar ** pa,NfsMount3RNull * x)56 nfsMount3RNullPack(uchar *a, uchar *ea, uchar **pa, NfsMount3RNull *x)
57 {
58 USED(ea);
59 USED(x);
60 *pa = a;
61 return 0;
62 }
63 int
nfsMount3RNullUnpack(uchar * a,uchar * ea,uchar ** pa,NfsMount3RNull * x)64 nfsMount3RNullUnpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RNull *x)
65 {
66 USED(ea);
67 USED(x);
68 *pa = a;
69 return 0;
70 }
71 void
nfsMount3TMntPrint(Fmt * fmt,NfsMount3TMnt * x)72 nfsMount3TMntPrint(Fmt *fmt, NfsMount3TMnt *x)
73 {
74 fmtprint(fmt, "%s\n", "NfsMount3TMnt");
75 fmtprint(fmt, "\t%s=", "path");
76 fmtprint(fmt, "\"%s\"", x->path);
77 fmtprint(fmt, "\n");
78 }
79 uint
nfsMount3TMntSize(NfsMount3TMnt * x)80 nfsMount3TMntSize(NfsMount3TMnt *x)
81 {
82 uint a;
83 USED(x);
84 a = 0 + sunStringSize(x->path);
85 return a;
86 }
87 int
nfsMount3TMntPack(uchar * a,uchar * ea,uchar ** pa,NfsMount3TMnt * x)88 nfsMount3TMntPack(uchar *a, uchar *ea, uchar **pa, NfsMount3TMnt *x)
89 {
90 if(sunStringPack(a, ea, &a, &x->path, 1024) < 0) goto Err;
91 *pa = a;
92 return 0;
93 Err:
94 *pa = ea;
95 return -1;
96 }
97 int
nfsMount3TMntUnpack(uchar * a,uchar * ea,uchar ** pa,NfsMount3TMnt * x)98 nfsMount3TMntUnpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TMnt *x)
99 {
100 if(sunStringUnpack(a, ea, &a, &x->path, 1024) < 0) goto Err;
101 *pa = a;
102 return 0;
103 Err:
104 *pa = ea;
105 return -1;
106 }
107 void
nfsMount3RMntPrint(Fmt * fmt,NfsMount3RMnt * x)108 nfsMount3RMntPrint(Fmt *fmt, NfsMount3RMnt *x)
109 {
110 fmtprint(fmt, "%s\n", "NfsMount3RMnt");
111 fmtprint(fmt, "\t%s=", "status");
112 fmtprint(fmt, "%ud", x->status);
113 fmtprint(fmt, "\n");
114 switch(x->status){
115 case 0:
116 fmtprint(fmt, "\t%s=", "handle");
117 fmtprint(fmt, "%.*H", x->len, x->handle);
118 fmtprint(fmt, "\n");
119 break;
120 }
121 }
122 uint
nfsMount3RMntSize(NfsMount3RMnt * x)123 nfsMount3RMntSize(NfsMount3RMnt *x)
124 {
125 uint a;
126 USED(x);
127 a = 0 + 4;
128 switch(x->status){
129 case 0:
130 a = a + sunVarOpaqueSize(x->len);
131 a = a + 4 + 4 * x->nauth;
132 break;
133 }
134 a = a;
135 return a;
136 }
137 uint
nfsMount1RMntSize(NfsMount3RMnt * x)138 nfsMount1RMntSize(NfsMount3RMnt *x)
139 {
140 uint a;
141 USED(x);
142 a = 0 + 4;
143 switch(x->status){
144 case 0:
145 a = a + NfsMount1HandleSize;
146 break;
147 }
148 return a;
149 }
150
151 int
nfsMount3RMntPack(uchar * a,uchar * ea,uchar ** pa,NfsMount3RMnt * x)152 nfsMount3RMntPack(uchar *a, uchar *ea, uchar **pa, NfsMount3RMnt *x)
153 {
154 int i;
155 if(sunUint32Pack(a, ea, &a, &x->status) < 0) goto Err;
156 switch(x->status){
157 case 0:
158 if(sunVarOpaquePack(a, ea, &a, &x->handle, &x->len, NfsMount3MaxHandleSize) < 0) goto Err;
159 if(sunUint32Pack(a, ea, &a, &x->nauth) < 0) goto Err;
160 for(i=0; i<x->nauth; i++)
161 if(sunUint32Pack(a, ea, &a, &x->auth[i]) < 0) goto Err;
162 break;
163 }
164 *pa = a;
165 return 0;
166 Err:
167 *pa = ea;
168 return -1;
169 }
170 int
nfsMount1RMntPack(uchar * a,uchar * ea,uchar ** pa,NfsMount3RMnt * x)171 nfsMount1RMntPack(uchar *a, uchar *ea, uchar **pa, NfsMount3RMnt *x)
172 {
173 if(sunUint32Pack(a, ea, &a, &x->status) < 0) goto Err;
174 switch(x->status){
175 case 0:
176 if(x->len != NfsMount1HandleSize)
177 goto Err;
178 if(sunFixedOpaquePack(a, ea, &a, x->handle, NfsMount1HandleSize) < 0) goto Err;
179 if(x->nauth != 0)
180 goto Err;
181 break;
182 }
183 *pa = a;
184 return 0;
185 Err:
186 *pa = ea;
187 return -1;
188 }
189 int
nfsMount1RMntUnpack(uchar * a,uchar * ea,uchar ** pa,NfsMount3RMnt * x)190 nfsMount1RMntUnpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RMnt *x)
191 {
192 if(sunUint32Unpack(a, ea, &a, &x->status) < 0) goto Err;
193 switch(x->status){
194 case 0:
195 x->len = NfsMount1HandleSize;
196 x->nauth = 0;
197 x->auth = 0;
198 if(sunFixedOpaqueUnpack(a, ea, &a, x->handle, NfsMount1HandleSize) < 0) goto Err;
199 if(x->nauth != 0)
200 goto Err;
201 break;
202 }
203 *pa = a;
204 return 0;
205 Err:
206 *pa = ea;
207 return -1;
208 }
209
210 int
nfsMount3RMntUnpack(uchar * a,uchar * ea,uchar ** pa,NfsMount3RMnt * x)211 nfsMount3RMntUnpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RMnt *x)
212 {
213 int i;
214
215 if(sunUint32Unpack(a, ea, &a, &x->status) < 0) goto Err;
216 switch(x->status){
217 case 0:
218 if(sunVarOpaqueUnpack(a, ea, &a, &x->handle, &x->len, NfsMount3MaxHandleSize) < 0) goto Err;
219 if(sunUint32Unpack(a, ea, &a, &x->nauth) < 0) goto Err;
220 x->auth = (u32int*)a;
221 for(i=0; i<x->nauth; i++)
222 if(sunUint32Unpack(a, ea, &a, &x->auth[i]) < 0) goto Err;
223 break;
224 }
225 *pa = a;
226 return 0;
227 Err:
228 *pa = ea;
229 return -1;
230 }
231 void
nfsMount3TDumpPrint(Fmt * fmt,NfsMount3TDump * x)232 nfsMount3TDumpPrint(Fmt *fmt, NfsMount3TDump *x)
233 {
234 USED(x);
235 fmtprint(fmt, "%s\n", "NfsMount3TDump");
236 }
237 uint
nfsMount3TDumpSize(NfsMount3TDump * x)238 nfsMount3TDumpSize(NfsMount3TDump *x)
239 {
240 uint a;
241 USED(x);
242 a = 0;
243 return a;
244 }
245 int
nfsMount3TDumpPack(uchar * a,uchar * ea,uchar ** pa,NfsMount3TDump * x)246 nfsMount3TDumpPack(uchar *a, uchar *ea, uchar **pa, NfsMount3TDump *x)
247 {
248 USED(ea);
249 USED(x);
250 *pa = a;
251 return 0;
252 }
253 int
nfsMount3TDumpUnpack(uchar * a,uchar * ea,uchar ** pa,NfsMount3TDump * x)254 nfsMount3TDumpUnpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TDump *x)
255 {
256 USED(ea);
257 USED(x);
258 *pa = a;
259 return 0;
260 }
261 void
nfsMount3EntryPrint(Fmt * fmt,NfsMount3Entry * x)262 nfsMount3EntryPrint(Fmt *fmt, NfsMount3Entry *x)
263 {
264 fmtprint(fmt, "%s\n", "NfsMount3Entry");
265 fmtprint(fmt, "\t%s=", "host");
266 fmtprint(fmt, "\"%s\"", x->host);
267 fmtprint(fmt, "\n");
268 fmtprint(fmt, "\t%s=", "path");
269 fmtprint(fmt, "\"%s\"", x->path);
270 fmtprint(fmt, "\n");
271 }
272 uint
nfsMount3EntrySize(NfsMount3Entry * x)273 nfsMount3EntrySize(NfsMount3Entry *x)
274 {
275 uint a;
276 USED(x);
277 a = 0 + sunStringSize(x->host) + sunStringSize(x->path);
278 return a;
279 }
280 int
nfsMount3EntryPack(uchar * a,uchar * ea,uchar ** pa,NfsMount3Entry * x)281 nfsMount3EntryPack(uchar *a, uchar *ea, uchar **pa, NfsMount3Entry *x)
282 {
283 u1int one;
284
285 one = 1;
286 if(sunUint1Pack(a, ea, &a, &one) < 0) goto Err;
287 if(sunStringPack(a, ea, &a, &x->host, 255) < 0) goto Err;
288 if(sunStringPack(a, ea, &a, &x->path, 1024) < 0) goto Err;
289 *pa = a;
290 return 0;
291 Err:
292 *pa = ea;
293 return -1;
294 }
295 int
nfsMount3EntryUnpack(uchar * a,uchar * ea,uchar ** pa,NfsMount3Entry * x)296 nfsMount3EntryUnpack(uchar *a, uchar *ea, uchar **pa, NfsMount3Entry *x)
297 {
298 u1int one;
299
300 if(sunUint1Unpack(a, ea, &a, &one) < 0 || one != 1) goto Err;
301 if(sunStringUnpack(a, ea, &a, &x->host, NfsMount3MaxNameSize) < 0) goto Err;
302 if(sunStringUnpack(a, ea, &a, &x->path, NfsMount3MaxPathSize) < 0) goto Err;
303 *pa = a;
304 return 0;
305 Err:
306 *pa = ea;
307 return -1;
308 }
309 void
nfsMount3RDumpPrint(Fmt * fmt,NfsMount3RDump * x)310 nfsMount3RDumpPrint(Fmt *fmt, NfsMount3RDump *x)
311 {
312 USED(x);
313 fmtprint(fmt, "%s\n", "NfsMount3RDump");
314 }
315 uint
nfsMount3RDumpSize(NfsMount3RDump * x)316 nfsMount3RDumpSize(NfsMount3RDump *x)
317 {
318 uint a;
319 USED(x);
320 a = 0;
321 a += x->count;
322 a += 4;
323 return a;
324 }
325 int
nfsMount3RDumpPack(uchar * a,uchar * ea,uchar ** pa,NfsMount3RDump * x)326 nfsMount3RDumpPack(uchar *a, uchar *ea, uchar **pa, NfsMount3RDump *x)
327 {
328 u1int zero;
329
330 zero = 0;
331 if(a+x->count > ea) goto Err;
332 memmove(a, x->data, x->count);
333 a += x->count;
334 if(sunUint1Pack(a, ea, &a, &zero) < 0)
335 goto Err;
336 *pa = a;
337 return 0;
338 Err:
339 *pa = ea;
340 return -1;
341 }
342 int
nfsMount3RDumpUnpack(uchar * a,uchar * ea,uchar ** pa,NfsMount3RDump * x)343 nfsMount3RDumpUnpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RDump *x)
344 {
345 int i;
346 uchar *oa;
347 u1int u1;
348 u32int u32;
349
350 oa = a;
351 for(i=0;; i++){
352 if(sunUint1Unpack(a, ea, &a, &u1) < 0)
353 goto Err;
354 if(u1 == 0)
355 break;
356 if(sunUint32Unpack(a, ea, &a, &u32) < 0
357 || u32 > NfsMount3MaxNameSize
358 || (a+=u32) >= ea
359 || sunUint32Unpack(a, ea, &a, &u32) < 0
360 || u32 > NfsMount3MaxPathSize
361 || (a+=u32) >= ea)
362 goto Err;
363 }
364 x->count = (a-4) - oa;
365 x->data = oa;
366 *pa = a;
367 return 0;
368 Err:
369 *pa = ea;
370 return -1;
371 }
372 void
nfsMount3TUmntPrint(Fmt * fmt,NfsMount3TUmnt * x)373 nfsMount3TUmntPrint(Fmt *fmt, NfsMount3TUmnt *x)
374 {
375 fmtprint(fmt, "%s\n", "NfsMount3TUmnt");
376 fmtprint(fmt, "\t%s=", "path");
377 fmtprint(fmt, "\"%s\"", x->path);
378 fmtprint(fmt, "\n");
379 }
380 uint
nfsMount3TUmntSize(NfsMount3TUmnt * x)381 nfsMount3TUmntSize(NfsMount3TUmnt *x)
382 {
383 uint a;
384 USED(x);
385 a = 0 + sunStringSize(x->path);
386 return a;
387 }
388 int
nfsMount3TUmntPack(uchar * a,uchar * ea,uchar ** pa,NfsMount3TUmnt * x)389 nfsMount3TUmntPack(uchar *a, uchar *ea, uchar **pa, NfsMount3TUmnt *x)
390 {
391 if(sunStringPack(a, ea, &a, &x->path, 1024) < 0) goto Err;
392 *pa = a;
393 return 0;
394 Err:
395 *pa = ea;
396 return -1;
397 }
398 int
nfsMount3TUmntUnpack(uchar * a,uchar * ea,uchar ** pa,NfsMount3TUmnt * x)399 nfsMount3TUmntUnpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TUmnt *x)
400 {
401 if(sunStringUnpack(a, ea, &a, &x->path, 1024) < 0) goto Err;
402 *pa = a;
403 return 0;
404 Err:
405 *pa = ea;
406 return -1;
407 }
408 void
nfsMount3RUmntPrint(Fmt * fmt,NfsMount3RUmnt * x)409 nfsMount3RUmntPrint(Fmt *fmt, NfsMount3RUmnt *x)
410 {
411 USED(x);
412 fmtprint(fmt, "%s\n", "NfsMount3RUmnt");
413 }
414 uint
nfsMount3RUmntSize(NfsMount3RUmnt * x)415 nfsMount3RUmntSize(NfsMount3RUmnt *x)
416 {
417 uint a;
418 USED(x);
419 a = 0;
420 return a;
421 }
422 int
nfsMount3RUmntPack(uchar * a,uchar * ea,uchar ** pa,NfsMount3RUmnt * x)423 nfsMount3RUmntPack(uchar *a, uchar *ea, uchar **pa, NfsMount3RUmnt *x)
424 {
425 USED(ea);
426 USED(x);
427 *pa = a;
428 return 0;
429 }
430 int
nfsMount3RUmntUnpack(uchar * a,uchar * ea,uchar ** pa,NfsMount3RUmnt * x)431 nfsMount3RUmntUnpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RUmnt *x)
432 {
433 USED(ea);
434 USED(x);
435 *pa = a;
436 return 0;
437 }
438 void
nfsMount3TUmntallPrint(Fmt * fmt,NfsMount3TUmntall * x)439 nfsMount3TUmntallPrint(Fmt *fmt, NfsMount3TUmntall *x)
440 {
441 USED(x);
442 fmtprint(fmt, "%s\n", "NfsMount3TUmntall");
443 }
444 uint
nfsMount3TUmntallSize(NfsMount3TUmntall * x)445 nfsMount3TUmntallSize(NfsMount3TUmntall *x)
446 {
447 uint a;
448 USED(x);
449 a = 0;
450 return a;
451 }
452 int
nfsMount3TUmntallPack(uchar * a,uchar * ea,uchar ** pa,NfsMount3TUmntall * x)453 nfsMount3TUmntallPack(uchar *a, uchar *ea, uchar **pa, NfsMount3TUmntall *x)
454 {
455 USED(ea);
456 USED(x);
457 *pa = a;
458 return 0;
459 }
460 int
nfsMount3TUmntallUnpack(uchar * a,uchar * ea,uchar ** pa,NfsMount3TUmntall * x)461 nfsMount3TUmntallUnpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TUmntall *x)
462 {
463 USED(ea);
464 USED(x);
465 *pa = a;
466 return 0;
467 }
468 void
nfsMount3RUmntallPrint(Fmt * fmt,NfsMount3RUmntall * x)469 nfsMount3RUmntallPrint(Fmt *fmt, NfsMount3RUmntall *x)
470 {
471 USED(x);
472 fmtprint(fmt, "%s\n", "NfsMount3RUmntall");
473 }
474 uint
nfsMount3RUmntallSize(NfsMount3RUmntall * x)475 nfsMount3RUmntallSize(NfsMount3RUmntall *x)
476 {
477 uint a;
478 USED(x);
479 a = 0;
480 return a;
481 }
482 int
nfsMount3RUmntallPack(uchar * a,uchar * ea,uchar ** pa,NfsMount3RUmntall * x)483 nfsMount3RUmntallPack(uchar *a, uchar *ea, uchar **pa, NfsMount3RUmntall *x)
484 {
485 USED(ea);
486 USED(x);
487 *pa = a;
488 return 0;
489 }
490 int
nfsMount3RUmntallUnpack(uchar * a,uchar * ea,uchar ** pa,NfsMount3RUmntall * x)491 nfsMount3RUmntallUnpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RUmntall *x)
492 {
493 USED(ea);
494 USED(x);
495 *pa = a;
496 return 0;
497 }
498 void
nfsMount3TExportPrint(Fmt * fmt,NfsMount3TExport * x)499 nfsMount3TExportPrint(Fmt *fmt, NfsMount3TExport *x)
500 {
501 USED(x);
502 fmtprint(fmt, "%s\n", "NfsMount3TExport");
503 }
504 uint
nfsMount3TExportSize(NfsMount3TExport * x)505 nfsMount3TExportSize(NfsMount3TExport *x)
506 {
507 uint a;
508 USED(x);
509 a = 0;
510 return a;
511 }
512 int
nfsMount3TExportPack(uchar * a,uchar * ea,uchar ** pa,NfsMount3TExport * x)513 nfsMount3TExportPack(uchar *a, uchar *ea, uchar **pa, NfsMount3TExport *x)
514 {
515 USED(ea);
516 USED(x);
517 *pa = a;
518 return 0;
519 }
520 int
nfsMount3TExportUnpack(uchar * a,uchar * ea,uchar ** pa,NfsMount3TExport * x)521 nfsMount3TExportUnpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TExport *x)
522 {
523 USED(ea);
524 USED(x);
525 *pa = a;
526 return 0;
527 }
528 void
nfsMount3RExportPrint(Fmt * fmt,NfsMount3RExport * x)529 nfsMount3RExportPrint(Fmt *fmt, NfsMount3RExport *x)
530 {
531 USED(x);
532 fmtprint(fmt, "%s\n", "NfsMount3RExport");
533 fmtprint(fmt, "\n");
534 }
535 uint
nfsMount3RExportSize(NfsMount3RExport * x)536 nfsMount3RExportSize(NfsMount3RExport *x)
537 {
538 uint a;
539 USED(x);
540 a = 0;
541 a += x->count;
542 a += 4; /* end of export list */
543 return a;
544 }
545 int
nfsMount3RExportPack(uchar * a,uchar * ea,uchar ** pa,NfsMount3RExport * x)546 nfsMount3RExportPack(uchar *a, uchar *ea, uchar **pa, NfsMount3RExport *x)
547 {
548 u1int zero;
549
550 zero = 0;
551 if(a+x->count > ea) goto Err;
552 memmove(a, x->data, x->count);
553 a += x->count;
554 if(sunUint1Pack(a, ea, &a, &zero) < 0)
555 goto Err;
556 *pa = a;
557 return 0;
558 Err:
559 *pa = ea;
560 return -1;
561 }
562 int
nfsMount3RExportUnpack(uchar * a,uchar * ea,uchar ** pa,NfsMount3RExport * x)563 nfsMount3RExportUnpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RExport *x)
564 {
565 int ng, ne;
566 uchar *oa;
567 u1int u1;
568 u32int u32;
569
570 oa = a;
571 ng = 0;
572 for(ne=0;; ne++){
573 if(sunUint1Unpack(a, ea, &a, &u1) < 0)
574 goto Err;
575 if(u1 == 0)
576 break;
577 if(sunUint32Unpack(a, ea, &a, &u32) < 0
578 || (a += (u32+3)&~3) >= ea)
579 goto Err;
580 for(;; ng++){
581 if(sunUint1Unpack(a, ea, &a, &u1) < 0)
582 goto Err;
583 if(u1 == 0)
584 break;
585 if(sunUint32Unpack(a, ea, &a, &u32) < 0
586 || (a += (u32+3)&~3) >= ea)
587 goto Err;
588 }
589 }
590 x->data = oa;
591 x->count = (a-4) - oa;
592 *pa = a;
593 return 0;
594 Err:
595 *pa = ea;
596 return -1;
597 }
598 uint
nfsMount3ExportGroupSize(uchar * a)599 nfsMount3ExportGroupSize(uchar *a)
600 {
601 int ng;
602 u1int have;
603 u32int n;
604
605 a += 4;
606 sunUint32Unpack(a, a+4, &a, &n);
607 a += (n+3)&~3;
608 ng = 0;
609 for(;;){
610 sunUint1Unpack(a, a+4, &a, &have);
611 if(have == 0)
612 break;
613 ng++;
614 sunUint32Unpack(a, a+4, &a, &n);
615 a += (n+3)&~3;
616 }
617 return ng;
618 }
619 int
nfsMount3ExportUnpack(uchar * a,uchar * ea,uchar ** pa,char ** gp,char *** pgp,NfsMount3Export * x)620 nfsMount3ExportUnpack(uchar *a, uchar *ea, uchar **pa, char **gp, char ***pgp, NfsMount3Export *x)
621 {
622 int ng;
623 u1int u1;
624
625 if(sunUint1Unpack(a, ea, &a, &u1) < 0 || u1 != 1) goto Err;
626 if(sunStringUnpack(a, ea, &a, &x->path, NfsMount3MaxPathSize) < 0) goto Err;
627 x->g = gp;
628 ng = 0;
629 for(;;){
630 if(sunUint1Unpack(a, ea, &a, &u1) < 0) goto Err;
631 if(u1 == 0)
632 break;
633 if(sunStringUnpack(a, ea, &a, &gp[ng++], NfsMount3MaxNameSize) < 0) goto Err;
634 }
635 x->ng = ng;
636 *pgp = gp+ng;
637 *pa = a;
638 return 0;
639
640 Err:
641 *pa = ea;
642 return -1;
643 }
644 uint
nfsMount3ExportSize(NfsMount3Export * x)645 nfsMount3ExportSize(NfsMount3Export *x)
646 {
647 int i;
648 uint a;
649
650 a = 4 + sunStringSize(x->path);
651 for(i=0; i<x->ng; i++)
652 a += 4 + sunStringSize(x->g[i]);
653 a += 4;
654 return a;
655 }
656 int
nfsMount3ExportPack(uchar * a,uchar * ea,uchar ** pa,NfsMount3Export * x)657 nfsMount3ExportPack(uchar *a, uchar *ea, uchar **pa, NfsMount3Export *x)
658 {
659 int i;
660 u1int u1;
661
662 u1 = 1;
663 if(sunUint1Pack(a, ea, &a, &u1) < 0) goto Err;
664 if(sunStringPack(a, ea, &a, &x->path, NfsMount3MaxPathSize) < 0) goto Err;
665 for(i=0; i<x->ng; i++){
666 if(sunUint1Pack(a, ea, &a, &u1) < 0) goto Err;
667 if(sunStringPack(a, ea, &a, &x->g[i], NfsMount3MaxNameSize) < 0) goto Err;
668 }
669 u1 = 0;
670 if(sunUint1Pack(a, ea, &a, &u1) < 0) goto Err;
671 *pa = a;
672 return 0;
673
674 Err:
675 *pa = ea;
676 return -1;
677 }
678
679 typedef int (*P)(uchar*, uchar*, uchar**, SunCall*);
680 typedef void (*F)(Fmt*, SunCall*);
681 typedef uint (*S)(SunCall*);
682
683 static SunProc proc3[] = {
684 (P)nfsMount3TNullPack, (P)nfsMount3TNullUnpack, (S)nfsMount3TNullSize, (F)nfsMount3TNullPrint, sizeof(NfsMount3TNull),
685 (P)nfsMount3RNullPack, (P)nfsMount3RNullUnpack, (S)nfsMount3RNullSize, (F)nfsMount3RNullPrint, sizeof(NfsMount3RNull),
686 (P)nfsMount3TMntPack, (P)nfsMount3TMntUnpack, (S)nfsMount3TMntSize, (F)nfsMount3TMntPrint, sizeof(NfsMount3TMnt),
687 (P)nfsMount3RMntPack, (P)nfsMount3RMntUnpack, (S)nfsMount3RMntSize, (F)nfsMount3RMntPrint, sizeof(NfsMount3RMnt),
688 (P)nfsMount3TDumpPack, (P)nfsMount3TDumpUnpack, (S)nfsMount3TDumpSize, (F)nfsMount3TDumpPrint, sizeof(NfsMount3TDump),
689 (P)nfsMount3RDumpPack, (P)nfsMount3RDumpUnpack, (S)nfsMount3RDumpSize, (F)nfsMount3RDumpPrint, sizeof(NfsMount3RDump),
690 (P)nfsMount3TUmntPack, (P)nfsMount3TUmntUnpack, (S)nfsMount3TUmntSize, (F)nfsMount3TUmntPrint, sizeof(NfsMount3TUmnt),
691 (P)nfsMount3RUmntPack, (P)nfsMount3RUmntUnpack, (S)nfsMount3RUmntSize, (F)nfsMount3RUmntPrint, sizeof(NfsMount3RUmnt),
692 (P)nfsMount3TUmntallPack, (P)nfsMount3TUmntallUnpack, (S)nfsMount3TUmntallSize, (F)nfsMount3TUmntallPrint, sizeof(NfsMount3TUmntall),
693 (P)nfsMount3RUmntallPack, (P)nfsMount3RUmntallUnpack, (S)nfsMount3RUmntallSize, (F)nfsMount3RUmntallPrint, sizeof(NfsMount3RUmntall),
694 (P)nfsMount3TExportPack, (P)nfsMount3TExportUnpack, (S)nfsMount3TExportSize, (F)nfsMount3TExportPrint, sizeof(NfsMount3TExport),
695 (P)nfsMount3RExportPack, (P)nfsMount3RExportUnpack, (S)nfsMount3RExportSize, (F)nfsMount3RExportPrint, sizeof(NfsMount3RExport),
696 };
697
698 static SunProc proc1[] = {
699 (P)nfsMount3TNullPack, (P)nfsMount3TNullUnpack, (S)nfsMount3TNullSize, (F)nfsMount3TNullPrint, sizeof(NfsMount3TNull),
700 (P)nfsMount3RNullPack, (P)nfsMount3RNullUnpack, (S)nfsMount3RNullSize, (F)nfsMount3RNullPrint, sizeof(NfsMount3RNull),
701 (P)nfsMount3TMntPack, (P)nfsMount3TMntUnpack, (S)nfsMount3TMntSize, (F)nfsMount3TMntPrint, sizeof(NfsMount3TMnt),
702 (P)nfsMount1RMntPack, (P)nfsMount1RMntUnpack, (S)nfsMount1RMntSize, (F)nfsMount3RMntPrint, sizeof(NfsMount3RMnt),
703 (P)nfsMount3TDumpPack, (P)nfsMount3TDumpUnpack, (S)nfsMount3TDumpSize, (F)nfsMount3TDumpPrint, sizeof(NfsMount3TDump),
704 (P)nfsMount3RDumpPack, (P)nfsMount3RDumpUnpack, (S)nfsMount3RDumpSize, (F)nfsMount3RDumpPrint, sizeof(NfsMount3RDump),
705 (P)nfsMount3TUmntPack, (P)nfsMount3TUmntUnpack, (S)nfsMount3TUmntSize, (F)nfsMount3TUmntPrint, sizeof(NfsMount3TUmnt),
706 (P)nfsMount3RUmntPack, (P)nfsMount3RUmntUnpack, (S)nfsMount3RUmntSize, (F)nfsMount3RUmntPrint, sizeof(NfsMount3RUmnt),
707 (P)nfsMount3TUmntallPack, (P)nfsMount3TUmntallUnpack, (S)nfsMount3TUmntallSize, (F)nfsMount3TUmntallPrint, sizeof(NfsMount3TUmntall),
708 (P)nfsMount3RUmntallPack, (P)nfsMount3RUmntallUnpack, (S)nfsMount3RUmntallSize, (F)nfsMount3RUmntallPrint, sizeof(NfsMount3RUmntall),
709 (P)nfsMount3TExportPack, (P)nfsMount3TExportUnpack, (S)nfsMount3TExportSize, (F)nfsMount3TExportPrint, sizeof(NfsMount3TExport),
710 (P)nfsMount3RExportPack, (P)nfsMount3RExportUnpack, (S)nfsMount3RExportSize, (F)nfsMount3RExportPrint, sizeof(NfsMount3RExport),
711 };
712
713 SunProg nfsMount3Prog =
714 {
715 NfsMount3Program,
716 NfsMount3Version,
717 proc3,
718 nelem(proc3),
719 };
720
721 SunProg nfsMount1Prog =
722 {
723 NfsMount1Program,
724 NfsMount1Version,
725 proc1,
726 nelem(proc1),
727 };
728