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