|
|
1.1 root 1: /*
2: * $Id: nfs_prot_xdr.c,v 5.2 90/06/23 22:20:27 jsp Rel $
3: *
4: * Copyright (c) 1989 Jan-Simon Pendry
5: * Copyright (c) 1989 Imperial College of Science, Technology & Medicine
6: * Copyright (c) 1989 The Regents of the University of California.
7: * All rights reserved.
8: *
9: * This code is derived from software contributed to Berkeley by
10: * Jan-Simon Pendry at Imperial College, London.
11: *
12: * Redistribution and use in source and binary forms are permitted provided
13: * that: (1) source distributions retain this entire copyright notice and
14: * comment, and (2) distributions including binaries display the following
15: * acknowledgement: ``This product includes software developed by the
16: * University of California, Berkeley and its contributors'' in the
17: * documentation or other materials provided with the distribution and in
18: * all advertising materials mentioning features or use of this software.
19: * Neither the name of the University nor the names of its contributors may
20: * be used to endorse or promote products derived from this software without
21: * specific prior written permission.
22: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
23: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
24: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
25: *
26: * @(#)nfs_prot_xdr.c 5.1 (Berkeley) 7/19/90
27: */
28:
29: #include "am.h"
30:
31:
32: #ifndef xdr_nfsstat
33: bool_t
34: xdr_nfsstat(xdrs, objp)
35: XDR *xdrs;
36: nfsstat *objp;
37: {
38: if (!xdr_enum(xdrs, (enum_t *)objp)) {
39: return (FALSE);
40: }
41: return (TRUE);
42: }
43: #endif /* xdr_nfsstat */
44:
45:
46:
47: #ifndef xdr_ftype
48: static bool_t
49: xdr_ftype(xdrs, objp)
50: XDR *xdrs;
51: ftype *objp;
52: {
53: if (!xdr_enum(xdrs, (enum_t *)objp)) {
54: return (FALSE);
55: }
56: return (TRUE);
57: }
58: #endif /* xdr_ftype */
59:
60:
61:
62: bool_t
63: xdr_nfs_fh(xdrs, objp)
64: XDR *xdrs;
65: nfs_fh *objp;
66: {
67: if (!xdr_opaque(xdrs, objp->data, NFS_FHSIZE)) {
68: return (FALSE);
69: }
70: return (TRUE);
71: }
72:
73:
74:
75:
76: static bool_t
77: xdr_nfstime(xdrs, objp)
78: XDR *xdrs;
79: nfstime *objp;
80: {
81: if (!xdr_u_int(xdrs, &objp->seconds)) {
82: return (FALSE);
83: }
84: if (!xdr_u_int(xdrs, &objp->useconds)) {
85: return (FALSE);
86: }
87: return (TRUE);
88: }
89:
90:
91:
92:
93: static bool_t
94: xdr_fattr(xdrs, objp)
95: XDR *xdrs;
96: fattr *objp;
97: {
98: if (!xdr_ftype(xdrs, &objp->type)) {
99: return (FALSE);
100: }
101: if (!xdr_u_int(xdrs, &objp->mode)) {
102: return (FALSE);
103: }
104: if (!xdr_u_int(xdrs, &objp->nlink)) {
105: return (FALSE);
106: }
107: if (!xdr_u_int(xdrs, &objp->uid)) {
108: return (FALSE);
109: }
110: if (!xdr_u_int(xdrs, &objp->gid)) {
111: return (FALSE);
112: }
113: if (!xdr_u_int(xdrs, &objp->size)) {
114: return (FALSE);
115: }
116: if (!xdr_u_int(xdrs, &objp->blocksize)) {
117: return (FALSE);
118: }
119: if (!xdr_u_int(xdrs, &objp->rdev)) {
120: return (FALSE);
121: }
122: if (!xdr_u_int(xdrs, &objp->blocks)) {
123: return (FALSE);
124: }
125: if (!xdr_u_int(xdrs, &objp->fsid)) {
126: return (FALSE);
127: }
128: if (!xdr_u_int(xdrs, &objp->fileid)) {
129: return (FALSE);
130: }
131: if (!xdr_nfstime(xdrs, &objp->atime)) {
132: return (FALSE);
133: }
134: if (!xdr_nfstime(xdrs, &objp->mtime)) {
135: return (FALSE);
136: }
137: if (!xdr_nfstime(xdrs, &objp->ctime)) {
138: return (FALSE);
139: }
140: return (TRUE);
141: }
142:
143:
144:
145:
146: static bool_t
147: xdr_sattr(xdrs, objp)
148: XDR *xdrs;
149: sattr *objp;
150: {
151: if (!xdr_u_int(xdrs, &objp->mode)) {
152: return (FALSE);
153: }
154: if (!xdr_u_int(xdrs, &objp->uid)) {
155: return (FALSE);
156: }
157: if (!xdr_u_int(xdrs, &objp->gid)) {
158: return (FALSE);
159: }
160: if (!xdr_u_int(xdrs, &objp->size)) {
161: return (FALSE);
162: }
163: if (!xdr_nfstime(xdrs, &objp->atime)) {
164: return (FALSE);
165: }
166: if (!xdr_nfstime(xdrs, &objp->mtime)) {
167: return (FALSE);
168: }
169: return (TRUE);
170: }
171:
172:
173:
174:
175: static bool_t
176: xdr_filename(xdrs, objp)
177: XDR *xdrs;
178: filename *objp;
179: {
180: if (!xdr_string(xdrs, objp, NFS_MAXNAMLEN)) {
181: return (FALSE);
182: }
183: return (TRUE);
184: }
185:
186:
187:
188:
189: bool_t
190: xdr_nfspath(xdrs, objp)
191: XDR *xdrs;
192: nfspath *objp;
193: {
194: if (!xdr_string(xdrs, objp, NFS_MAXPATHLEN)) {
195: return (FALSE);
196: }
197: return (TRUE);
198: }
199:
200:
201:
202:
203: bool_t
204: xdr_attrstat(xdrs, objp)
205: XDR *xdrs;
206: attrstat *objp;
207: {
208: if (!xdr_nfsstat(xdrs, &objp->status)) {
209: return (FALSE);
210: }
211: switch (objp->status) {
212: case NFS_OK:
213: if (!xdr_fattr(xdrs, &objp->attrstat_u.attributes)) {
214: return (FALSE);
215: }
216: break;
217: }
218: return (TRUE);
219: }
220:
221:
222:
223:
224: bool_t
225: xdr_sattrargs(xdrs, objp)
226: XDR *xdrs;
227: sattrargs *objp;
228: {
229: if (!xdr_nfs_fh(xdrs, &objp->file)) {
230: return (FALSE);
231: }
232: if (!xdr_sattr(xdrs, &objp->attributes)) {
233: return (FALSE);
234: }
235: return (TRUE);
236: }
237:
238:
239:
240:
241: bool_t
242: xdr_diropargs(xdrs, objp)
243: XDR *xdrs;
244: diropargs *objp;
245: {
246: if (!xdr_nfs_fh(xdrs, &objp->dir)) {
247: return (FALSE);
248: }
249: if (!xdr_filename(xdrs, &objp->name)) {
250: return (FALSE);
251: }
252: return (TRUE);
253: }
254:
255:
256:
257:
258: bool_t
259: xdr_diropokres(xdrs, objp)
260: XDR *xdrs;
261: diropokres *objp;
262: {
263: if (!xdr_nfs_fh(xdrs, &objp->file)) {
264: return (FALSE);
265: }
266: if (!xdr_fattr(xdrs, &objp->attributes)) {
267: return (FALSE);
268: }
269: return (TRUE);
270: }
271:
272:
273:
274:
275: bool_t
276: xdr_diropres(xdrs, objp)
277: XDR *xdrs;
278: diropres *objp;
279: {
280: if (!xdr_nfsstat(xdrs, &objp->status)) {
281: return (FALSE);
282: }
283: switch (objp->status) {
284: case NFS_OK:
285: if (!xdr_diropokres(xdrs, &objp->diropres_u.diropres)) {
286: return (FALSE);
287: }
288: break;
289: }
290: return (TRUE);
291: }
292:
293:
294:
295:
296: bool_t
297: xdr_readlinkres(xdrs, objp)
298: XDR *xdrs;
299: readlinkres *objp;
300: {
301: if (!xdr_nfsstat(xdrs, &objp->status)) {
302: return (FALSE);
303: }
304: switch (objp->status) {
305: case NFS_OK:
306: if (!xdr_nfspath(xdrs, &objp->readlinkres_u.data)) {
307: return (FALSE);
308: }
309: break;
310: }
311: return (TRUE);
312: }
313:
314:
315:
316:
317: bool_t
318: xdr_readargs(xdrs, objp)
319: XDR *xdrs;
320: readargs *objp;
321: {
322: if (!xdr_nfs_fh(xdrs, &objp->file)) {
323: return (FALSE);
324: }
325: if (!xdr_u_int(xdrs, &objp->offset)) {
326: return (FALSE);
327: }
328: if (!xdr_u_int(xdrs, &objp->count)) {
329: return (FALSE);
330: }
331: if (!xdr_u_int(xdrs, &objp->totalcount)) {
332: return (FALSE);
333: }
334: return (TRUE);
335: }
336:
337:
338:
339:
340: bool_t
341: xdr_readokres(xdrs, objp)
342: XDR *xdrs;
343: readokres *objp;
344: {
345: if (!xdr_fattr(xdrs, &objp->attributes)) {
346: return (FALSE);
347: }
348: if (!xdr_bytes(xdrs, (char **)&objp->data.data_val, (u_int *)&objp->data.data_len, NFS_MAXDATA)) {
349: return (FALSE);
350: }
351: return (TRUE);
352: }
353:
354:
355:
356:
357: bool_t
358: xdr_readres(xdrs, objp)
359: XDR *xdrs;
360: readres *objp;
361: {
362: if (!xdr_nfsstat(xdrs, &objp->status)) {
363: return (FALSE);
364: }
365: switch (objp->status) {
366: case NFS_OK:
367: if (!xdr_readokres(xdrs, &objp->readres_u.reply)) {
368: return (FALSE);
369: }
370: break;
371: }
372: return (TRUE);
373: }
374:
375:
376:
377:
378: bool_t
379: xdr_writeargs(xdrs, objp)
380: XDR *xdrs;
381: writeargs *objp;
382: {
383: if (!xdr_nfs_fh(xdrs, &objp->file)) {
384: return (FALSE);
385: }
386: if (!xdr_u_int(xdrs, &objp->beginoffset)) {
387: return (FALSE);
388: }
389: if (!xdr_u_int(xdrs, &objp->offset)) {
390: return (FALSE);
391: }
392: if (!xdr_u_int(xdrs, &objp->totalcount)) {
393: return (FALSE);
394: }
395: if (!xdr_bytes(xdrs, (char **)&objp->data.data_val, (u_int *)&objp->data.data_len, NFS_MAXDATA)) {
396: return (FALSE);
397: }
398: return (TRUE);
399: }
400:
401:
402:
403:
404: bool_t
405: xdr_createargs(xdrs, objp)
406: XDR *xdrs;
407: createargs *objp;
408: {
409: if (!xdr_diropargs(xdrs, &objp->where)) {
410: return (FALSE);
411: }
412: if (!xdr_sattr(xdrs, &objp->attributes)) {
413: return (FALSE);
414: }
415: return (TRUE);
416: }
417:
418:
419:
420:
421: bool_t
422: xdr_renameargs(xdrs, objp)
423: XDR *xdrs;
424: renameargs *objp;
425: {
426: if (!xdr_diropargs(xdrs, &objp->from)) {
427: return (FALSE);
428: }
429: if (!xdr_diropargs(xdrs, &objp->to)) {
430: return (FALSE);
431: }
432: return (TRUE);
433: }
434:
435:
436:
437:
438: bool_t
439: xdr_linkargs(xdrs, objp)
440: XDR *xdrs;
441: linkargs *objp;
442: {
443: if (!xdr_nfs_fh(xdrs, &objp->from)) {
444: return (FALSE);
445: }
446: if (!xdr_diropargs(xdrs, &objp->to)) {
447: return (FALSE);
448: }
449: return (TRUE);
450: }
451:
452:
453:
454:
455: bool_t
456: xdr_symlinkargs(xdrs, objp)
457: XDR *xdrs;
458: symlinkargs *objp;
459: {
460: if (!xdr_diropargs(xdrs, &objp->from)) {
461: return (FALSE);
462: }
463: if (!xdr_nfspath(xdrs, &objp->to)) {
464: return (FALSE);
465: }
466: if (!xdr_sattr(xdrs, &objp->attributes)) {
467: return (FALSE);
468: }
469: return (TRUE);
470: }
471:
472:
473:
474:
475: static bool_t
476: xdr_nfscookie(xdrs, objp)
477: XDR *xdrs;
478: nfscookie objp;
479: {
480: if (!xdr_opaque(xdrs, objp, NFS_COOKIESIZE)) {
481: return (FALSE);
482: }
483: return (TRUE);
484: }
485:
486:
487:
488:
489: bool_t
490: xdr_readdirargs(xdrs, objp)
491: XDR *xdrs;
492: readdirargs *objp;
493: {
494: if (!xdr_nfs_fh(xdrs, &objp->dir)) {
495: return (FALSE);
496: }
497: if (!xdr_nfscookie(xdrs, objp->cookie)) {
498: return (FALSE);
499: }
500: if (!xdr_u_int(xdrs, &objp->count)) {
501: return (FALSE);
502: }
503: return (TRUE);
504: }
505:
506:
507:
508:
509: static bool_t
510: xdr_entry(xdrs, objp)
511: XDR *xdrs;
512: entry *objp;
513: {
514: if (!xdr_u_int(xdrs, &objp->fileid)) {
515: return (FALSE);
516: }
517: if (!xdr_filename(xdrs, &objp->name)) {
518: return (FALSE);
519: }
520: if (!xdr_nfscookie(xdrs, objp->cookie)) {
521: return (FALSE);
522: }
523: if (!xdr_pointer(xdrs, (char **)&objp->nextentry, sizeof(entry), xdr_entry)) {
524: return (FALSE);
525: }
526: return (TRUE);
527: }
528:
529:
530:
531:
532: static bool_t
533: xdr_dirlist(xdrs, objp)
534: XDR *xdrs;
535: dirlist *objp;
536: {
537: if (!xdr_pointer(xdrs, (char **)&objp->entries, sizeof(entry), xdr_entry)) {
538: return (FALSE);
539: }
540: if (!xdr_bool(xdrs, &objp->eof)) {
541: return (FALSE);
542: }
543: return (TRUE);
544: }
545:
546:
547:
548:
549: bool_t
550: xdr_readdirres(xdrs, objp)
551: XDR *xdrs;
552: readdirres *objp;
553: {
554: if (!xdr_nfsstat(xdrs, &objp->status)) {
555: return (FALSE);
556: }
557: switch (objp->status) {
558: case NFS_OK:
559: if (!xdr_dirlist(xdrs, &objp->readdirres_u.reply)) {
560: return (FALSE);
561: }
562: break;
563: }
564: return (TRUE);
565: }
566:
567:
568:
569:
570: bool_t
571: xdr_statfsokres(xdrs, objp)
572: XDR *xdrs;
573: statfsokres *objp;
574: {
575: if (!xdr_u_int(xdrs, &objp->tsize)) {
576: return (FALSE);
577: }
578: if (!xdr_u_int(xdrs, &objp->bsize)) {
579: return (FALSE);
580: }
581: if (!xdr_u_int(xdrs, &objp->blocks)) {
582: return (FALSE);
583: }
584: if (!xdr_u_int(xdrs, &objp->bfree)) {
585: return (FALSE);
586: }
587: if (!xdr_u_int(xdrs, &objp->bavail)) {
588: return (FALSE);
589: }
590: return (TRUE);
591: }
592:
593:
594:
595:
596: bool_t
597: xdr_statfsres(xdrs, objp)
598: XDR *xdrs;
599: statfsres *objp;
600: {
601: if (!xdr_nfsstat(xdrs, &objp->status)) {
602: return (FALSE);
603: }
604: switch (objp->status) {
605: case NFS_OK:
606: if (!xdr_statfsokres(xdrs, &objp->statfsres_u.reply)) {
607: return (FALSE);
608: }
609: break;
610: }
611: return (TRUE);
612: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.