2 static char sfs_3_xdrSid[] = "@(#)sfs_3_xdr.c 2.1 97/10/23";
6 * Copyright (c) 1992-1997,2001 by Standard Performance Evaluation Corporation
8 * Standard Performance Evaluation Corporation (SPEC)
9 * 6585 Merchant Place, Suite 100
12 * This product contains benchmarks acquired from several sources who
13 * understand and agree with SPEC's goal of creating fair and objective
14 * benchmarks to measure computer performance.
16 * This copyright notice is placed here only to protect SPEC in the
17 * event the source is misused in any manner that is contrary to the
18 * spirit, the goals and the intent of SPEC.
20 * The source code is provided to the user or company under the license
21 * agreement for the SPEC Benchmark Suite for this product.
25 * -------------------------- sfs_3_xdr.c --------------------------
27 * XDR routines for the nfs protocol.
30 * xdr_GETATTR3args(XDR *, GETATTR3args *)
31 * xdr_GETATTR3res(XDR *, GETATTR3res *)
32 * xdr_SETATTR3args(XDR *, SETATTR3args *)
33 * xdr_SETATTR3res(XDR *, SETATTR3res *)
34 * xdr_LOOKUP3args(XDR *, LOOKUP3args *)
35 * xdr_LOOKUP3res(XDR *, LOOKUP3res *)
36 * xdr_ACCESS3args(XDR *, ACCESS3args *)
37 * xdr_ACCESS3res(XDR *, ACCESS3res *)
38 * xdr_READLINK3args(XDR *, READLINK3args *)
39 * xdr_READLINK3res(XDR *, READLINK3res *)
40 * xdr_READ3args(XDR *, READ3args *)
41 * xdr_READ3res(XDR *, READ3res *)
42 * xdr_WRITE3args(XDR *, WRITE3args *)
43 * xdr_WRITE3res(XDR *, WRITE3res *)
44 * xdr_CREATE3args(XDR *, CREATE3args *)
45 * xdr_CREATE3res(XDR *, CREATE3res *)
46 * xdr_MKDIR3args(XDR *, MKDIR3args *)
47 * xdr_MKDIR3res(XDR *, MKDIR3res *)
48 * xdr_SYMLINK3args(XDR *, SYMLINK3args *)
49 * xdr_SYMLINK3res(XDR *, SYMLINK3res *)
50 * xdr_MKNOD3args(XDR *, MKNOD3args *)
51 * xdr_MKNOD3res(XDR *, MKNOD3res *)
52 * xdr_REMOVE3args(XDR *, REMOVE3args *)
53 * xdr_REMOVE3res(XDR *, REMOVE3res *)
54 * xdr_RMDIR3args(XDR *, RMDIR3args *)
55 * xdr_RMDIR3res(XDR *, RMDIR3res *)
56 * xdr_RENAME3args(XDR *, RENAME3args *)
57 * xdr_RENAME3res(XDR *, RENAME3res *)
58 * xdr_LINK3args(XDR *, LINK3args *)
59 * xdr_LINK3res(XDR *, LINK3res *)
60 * xdr_READDIR3args(XDR *, READDIR3args *)
61 * xdr_READDIR3res(XDR *, READDIR3res *)
62 * xdr_READDIRPLUS3args(XDR *, READDIRPLUS3args *)
63 * xdr_READDIRPLUS3res(XDR *, READDIRPLUS3res *)
64 * xdr_FSSTAT3args(XDR *, FSSTAT3args *)
65 * xdr_FSSTAT3res(XDR *, FSSTAT3res *)
66 * xdr_FSINFO3args(XDR *, FSINFO3args *)
67 * xdr_FSINFO3res(XDR *, FSINFO3res *)
68 * xdr_PATHCONF3args(XDR *, PATHCONF3args *)
69 * xdr_PATHCONF3res(XDR *, PATHCONF3res *)
70 * xdr_COMMIT3args(XDR *, COMMIT3args *)
71 * xdr_COMMIT3res(XDR *, COMMIT3res *)
72 * xdr_mntres3(XDR *, mountres3 *)
75 * xdr_string3(XDR *, char **, unsigned int)
76 * xdr_filename3(XDR *, filename3 *)
77 * xdr_nfspath3(XDR *, nfspath3 *)
78 * xdr_nfs_uint64_t(XDR *, nfs_uint64_t *)
79 * xdr_cookieverf3(XDR *, cookieverf3)
80 * xdr_createverf3(XDR *, createverf3)
81 * xdr_writeverf3(XDR *, writeverf3)
82 * xdr_nfs_fh3(XDR *, nfs_fh3 *)
83 * xdr_diropargs3(XDR *, diropargs3 *)
84 * xdr_nfstime3(XDR *, nfstime3 *)
85 * xdr_specdata3(XDR *, specdata3 *)
86 * xdr_nfsstat3(XDR *, nfsstat3 *)
87 * xdr_ftype3(XDR *, ftype3 *)
88 * xdr_fattr3(XDR *, fattr3 *)
89 * xdr_post_op_attr(XDR *, post_op_attr *)
90 * xdr_wcc_attr(XDR *, wcc_attr *)
91 * xdr_pre_op_attr(XDR *, pre_op_attr *)
92 * xdr_wcc_data(XDR *, wcc_data *)
93 * xdr_post_op_fh3(XDR *, post_op_fh3 *)
94 * xdr_time_how(XDR *, time_how *)
95 * xdr_set_mode3(XDR *, set_mode3 *)
96 * xdr_set_uid3(XDR *, set_uid3 *)
97 * xdr_set_gid3(XDR *, set_gid3 *)
98 * xdr_set_size3(XDR *, set_size3 *)
99 * xdr_set_atime(XDR *, set_atime *)
100 * xdr_set_mtime(XDR *, set_mtime *)
101 * xdr_sattr3(XDR *, sattr3 *)
102 * xdr_GETATTR3resok(XDR *, GETATTR3resok *)
103 * xdr_sattrguard3(XDR *, sattrguard3 *)
104 * xdr_SETATTR3resok(XDR *, SETATTR3resok *)
105 * xdr_SETATTR3resfail(XDR *, SETATTR3resfail *)
106 * xdr_LOOKUP3resok(XDR *, LOOKUP3resok *)
107 * xdr_LOOKUP3resfail(XDR *, LOOKUP3resfail *)
108 * xdr_ACCESS3resok(XDR *, ACCESS3resok *)
109 * xdr_ACCESS3resfail(XDR *, ACCESS3resfail *)
110 * xdr_READLINK3resok(XDR *, READLINK3resok *)
111 * xdr_READLINK3resfail(XDR *, READLINK3resfail *)
112 * xdr_READ3resok(XDR *, READ3resok *)
113 * xdr_READ3resfail(XDR *, READ3resfail *)
114 * xdr_stable_how(XDR *, stable_how *)
115 * xdr_WRITE3resok(XDR *, WRITE3resok *)
116 * xdr_WRITE3resfail(XDR *, WRITE3resfail *)
117 * xdr_createmode3(XDR *, createmode3 *)
118 * xdr_createhow3(XDR *, createhow3 *)
119 * xdr_CREATE3resok(XDR *, CREATE3resok *)
120 * xdr_CREATE3resfail(XDR *, CREATE3resfail *)
121 * xdr_MKDIR3resok(XDR *, MKDIR3resok *)
122 * xdr_MKDIR3resfail(XDR *, MKDIR3resfail *)
123 * xdr_symlinkdata3(XDR *, symlinkdata3 *)
124 * xdr_SYMLINK3resok(XDR *, SYMLINK3resok *)
125 * xdr_SYMLINK3resfail(XDR *, SYMLINK3resfail *)
126 * xdr_devicedata3(XDR *, devicedata3 *)
127 * xdr_mknoddata3(XDR *, mknoddata3 *)
128 * xdr_MKNOD3resok(XDR *, MKNOD3resok *)
129 * xdr_MKNOD3resfail(XDR *, MKNOD3resfail *)
130 * xdr_REMOVE3resok(XDR *, REMOVE3resok *)
131 * xdr_REMOVE3resfail(XDR *, REMOVE3resfail *)
132 * xdr_RMDIR3resok(XDR *, RMDIR3resok *)
133 * xdr_RMDIR3resfail(XDR *, RMDIR3resfail *)
134 * xdr_RENAME3resok(XDR *, RENAME3resok *)
135 * xdr_RENAME3resfail(XDR *, RENAME3resfail *)
136 * xdr_LINK3resok(XDR *, LINK3resok *)
137 * xdr_LINK3resfail(XDR *, LINK3resfail *)
138 * xdr_getdirlist(XDR *, READDIR3resok *)
139 * xdr_READDIR3resok(XDR *, READDIR3resok *)
140 * xdr_READDIR3resfail(XDR *, READDIR3resfail *)
141 * xdr_getdirpluslist(XDR *, READDIRPLUS3resok *)
142 * xdr_READDIRPLUS3resok(XDR *, READDIRPLUS3resok *)
143 * xdr_READDIRPLUS3resfail(XDR *, READDIRPLUS3resfail *)
144 * xdr_FSSTAT3resok(XDR *, FSSTAT3resok *)
145 * xdr_FSSTAT3resfail(XDR *, FSSTAT3resfail *)
146 * xdr_FSINFO3resok(XDR *, FSINFO3resok *)
147 * xdr_FSINFO3resfail(XDR *, FSINFO3resfail *)
148 * xdr_PATHCONF3resok(XDR *, PATHCONF3resok *)
149 * xdr_PATHCONF3resfail(XDR *, PATHCONF3resfail *)
150 * xdr_COMMIT3resok(XDR *, COMMIT3resok *)
151 * xdr_COMMIT3resfail(XDR *, COMMIT3resfail *)
154 * 28-Jun-94 ChakChung Ng Created.
159 * ------------------------- Include Files -------------------------
170 #include <sys/types.h>
171 #include <sys/stat.h>
173 #include "sfs_c_def.h"
176 * ----------------------- SFS XDR Routines -------------------------
180 * xdr_string3 deals with "C strings" - arrays of bytes that are terminated by
181 * a NULL character. The parameter cpp references a pointer to storage. If the
182 * pointer is null, then necessary storage is allocated. The last parameter is
183 * the max allowed length of the string as allowed by the system. The NFS
184 * Version 3 protocol does not place limits on strings, but the implementation
185 * needs to place a reasonable limit to avoid problems.
192 unsigned int maxsize)
195 unsigned int size, nodesize;
198 * first deal with the length since xdr strings are counted-strings
201 switch (xdrs->x_op) {
203 if (sp == NULL || sp == nfs3nametoolong)
204 return(TRUE); /* already free */
211 if (!xdr_u_int(xdrs, &size))
215 * now deal with the actual bytes
217 switch (xdrs->x_op) {
219 if (size > maxsize) {
220 int xskp = (((((int)size) + 3) / 4) * 4);
222 *cpp = nfs3nametoolong;
223 if ((xdrs->x_handy -= xskp) < 0)
225 xdrs->x_private += xskp;
232 sp = (char *)malloc(nodesize);
237 sp[size] = 0; /* 0 through size-1 are original string */
240 return(xdr_opaque(xdrs, sp, size));
243 mem_free((caddr_t)sp, nodesize);
257 return(xdr_string3(xdrs, objp, NFS_MAXNAMLEN));
266 return(xdr_string3(xdrs, objp, NFS_MAXPATHLEN));
274 return(xdr_int(xdrs, (int *)&objp->_p._u) &&
275 xdr_int(xdrs, (int *)&objp->_p._l));
283 return(xdr_opaque(xdrs, objp, NFS3_COOKIEVERFSIZE));
291 return(xdr_opaque(xdrs, objp, NFS3_CREATEVERFSIZE));
299 return(xdr_opaque(xdrs, objp, NFS3_WRITEVERFSIZE));
307 if (!xdr_u_int(xdrs, &objp->fh3_length))
310 if (objp->fh3_length > NFS3_FHSIZE)
312 if (xdrs->x_op == XDR_DECODE || xdrs->x_op == XDR_ENCODE)
313 return(xdr_opaque(xdrs, objp->fh3_u.data, objp->fh3_length));
315 if (xdrs->x_op == XDR_FREE)
326 if (xdr_nfs_fh3(xdrs, &objp->dir))
327 return(xdr_filename3(xdrs, &objp->name));
336 if (xdr_uint32_t(xdrs, &objp->seconds))
337 return(xdr_uint32_t(xdrs, &objp->nseconds));
346 if (xdr_uint32_t(xdrs, &objp->specdata1))
347 return(xdr_uint32_t(xdrs, &objp->specdata2));
356 return(xdr_enum(xdrs, (enum_t *)objp));
364 return(xdr_enum(xdrs, (enum_t *)objp));
372 if (!xdr_ftype3(xdrs, &objp->type))
374 if (!xdr_uint32_t(xdrs, &objp->mode))
376 if (!xdr_uint32_t(xdrs, &objp->nlink))
378 if (!xdr_uint32_t(xdrs, &objp->uid))
380 if (!xdr_uint32_t(xdrs, &objp->gid))
382 if (!xdr_nfs_uint64_t(xdrs, &objp->size))
384 if (!xdr_nfs_uint64_t(xdrs, &objp->used))
386 if (!xdr_specdata3(xdrs, &objp->rdev))
388 if (!xdr_nfs_uint64_t(xdrs, &objp->fsid))
390 if (!xdr_nfs_uint64_t(xdrs, &objp->fileid))
392 if (!xdr_nfstime3(xdrs, &objp->atime))
394 if (!xdr_nfstime3(xdrs, &objp->mtime))
396 if (!xdr_nfstime3(xdrs, &objp->ctime))
406 if (!xdr_bool(xdrs, &objp->attributes))
408 switch (objp->attributes) {
409 case TRUE: return(xdr_fattr3(xdrs, &objp->attr));
410 case FALSE: return(TRUE);
411 default: return(FALSE);
420 if (xdr_nfs_uint64_t(xdrs, &objp->size) &&
421 xdr_nfstime3(xdrs, &objp->mtime))
422 return(xdr_nfstime3(xdrs, &objp->ctime));
431 if (!xdr_bool(xdrs, &objp->attributes))
433 switch (objp->attributes) {
434 case TRUE: return(xdr_wcc_attr(xdrs, &objp->attr));
435 case FALSE: return(TRUE);
436 default: return(FALSE);
445 if (xdr_pre_op_attr(xdrs, &objp->before))
446 return(xdr_post_op_attr(xdrs, &objp->after));
455 if (!xdr_bool(xdrs, &objp->handle_follows))
457 switch (objp->handle_follows) {
458 case TRUE: return(xdr_nfs_fh3(xdrs, &objp->handle));
459 case FALSE: return(TRUE);
460 default: return(FALSE);
469 return(xdr_enum(xdrs, (enum_t *)objp));
477 if (!xdr_bool(xdrs, &objp->set_it))
479 if (objp->set_it == TRUE)
480 return(xdr_uint32_t(xdrs, &objp->mode));
489 if (!xdr_bool(xdrs, &objp->set_it))
491 if (objp->set_it == TRUE)
492 return(xdr_uint32_t(xdrs, &objp->uid));
501 if (!xdr_bool(xdrs, &objp->set_it))
503 if (objp->set_it == TRUE)
504 return(xdr_uint32_t(xdrs, &objp->gid));
513 if (!xdr_bool(xdrs, &objp->set_it))
515 if (objp->set_it == TRUE)
516 return(xdr_nfs_uint64_t(xdrs, &objp->size));
525 if (!xdr_time_how(xdrs, &objp->set_it))
527 if (objp->set_it == SET_TO_CLIENT_TIME)
528 return(xdr_nfstime3(xdrs, &objp->atime));
537 if (!xdr_time_how(xdrs, &objp->set_it))
539 if (objp->set_it == SET_TO_CLIENT_TIME)
540 return(xdr_nfstime3(xdrs, &objp->mtime));
549 if (xdr_set_mode3(xdrs, &objp->mode) &&
550 xdr_set_uid3(xdrs, &objp->uid) &&
551 xdr_set_gid3(xdrs, &objp->gid) &&
552 xdr_set_size3(xdrs, &objp->size) &&
553 xdr_set_atime(xdrs, &objp->atime))
554 return(xdr_set_mtime(xdrs, &objp->mtime));
564 return(xdr_nfs_fh3(xdrs, &objp->object));
570 GETATTR3resok * objp)
572 return(xdr_fattr3(xdrs, &objp->obj_attributes));
580 if (!xdr_nfsstat3(xdrs, &objp->status))
582 if (objp->status == NFS3_OK)
583 return(xdr_GETATTR3resok(xdrs, &objp->resok));
593 if (!xdr_bool(xdrs, &objp->check))
595 switch (objp->check) {
596 case TRUE: return(xdr_nfstime3(xdrs, &objp->obj_ctime));
597 case FALSE: return(TRUE);
598 default: return(FALSE);
607 if (xdr_nfs_fh3(xdrs, &objp->object) &&
608 xdr_sattr3(xdrs, &objp->new_attributes))
609 return(xdr_sattrguard3(xdrs, &objp->guard));
616 SETATTR3resok * objp)
618 return(xdr_wcc_data(xdrs, &objp->obj_wcc));
624 SETATTR3resfail * objp)
626 return(xdr_wcc_data(xdrs, &objp->obj_wcc));
634 if (!xdr_nfsstat3(xdrs, &objp->status))
636 if (objp->status == NFS3_OK)
637 return(xdr_SETATTR3resok(xdrs, &objp->resok));
638 return(xdr_SETATTR3resfail(xdrs, &objp->resfail));
647 return(xdr_diropargs3(xdrs, &objp->what));
655 if (xdr_nfs_fh3(xdrs, &objp->object) &&
656 xdr_post_op_attr(xdrs, &objp->obj_attributes))
657 return(xdr_post_op_attr(xdrs, &objp->dir_attributes));
664 LOOKUP3resfail * objp)
666 return(xdr_post_op_attr(xdrs, &objp->dir_attributes));
674 if (!xdr_nfsstat3(xdrs, &objp->status))
676 if (objp->status == NFS3_OK)
677 return(xdr_LOOKUP3resok(xdrs, &objp->resok));
678 return(xdr_LOOKUP3resfail(xdrs, &objp->resfail));
687 if (xdr_nfs_fh3(xdrs, &objp->object))
688 return(xdr_uint32_t(xdrs, &objp->access));
697 if (xdr_post_op_attr(xdrs, &objp->obj_attributes))
698 return(xdr_uint32_t(xdrs, &objp->access));
705 ACCESS3resfail * objp)
707 return(xdr_post_op_attr(xdrs, &objp->obj_attributes));
715 if (!xdr_nfsstat3(xdrs, &objp->status))
717 if (objp->status == NFS3_OK)
718 return(xdr_ACCESS3resok(xdrs, &objp->resok));
719 return(xdr_ACCESS3resfail(xdrs, &objp->resfail));
726 READLINK3args * objp)
728 return(xdr_nfs_fh3(xdrs, &objp->symlink));
734 READLINK3resok * objp)
736 if (xdr_post_op_attr(xdrs, &objp->symlink_attributes))
737 return(xdr_nfspath3(xdrs, &objp->data));
742 xdr_READLINK3resfail(
744 READLINK3resfail * objp)
746 return(xdr_post_op_attr(xdrs, &objp->symlink_attributes));
754 if (!xdr_nfsstat3(xdrs, &objp->status))
756 if (objp->status == NFS3_OK)
757 return(xdr_READLINK3resok(xdrs, &objp->resok));
758 return(xdr_READLINK3resfail(xdrs, &objp->resfail));
768 if (xdr_nfs_fh3(xdrs, &objp->file) &&
769 xdr_nfs_uint64_t(xdrs, &objp->offset))
770 return(xdr_uint32_t(xdrs, &objp->count));
779 if (xdr_post_op_attr(xdrs, &objp->file_attributes) &&
780 xdr_uint32_t(xdrs, &objp->count) &&
781 xdr_bool(xdrs, &objp->eof))
782 return(xdr_bytes(xdrs, (char **)&objp->data.data_val,
783 (unsigned int *)&objp->data.data_len,
793 return(xdr_post_op_attr(xdrs, &objp->file_attributes));
801 if (!xdr_nfsstat3(xdrs, &objp->status))
803 if (objp->status == NFS3_OK)
804 return(xdr_READ3resok(xdrs, &objp->resok));
805 return(xdr_READ3resfail(xdrs, &objp->resfail));
814 return(xdr_enum(xdrs, (enum_t *)objp));
822 if (xdr_nfs_fh3(xdrs, &objp->file) &&
823 xdr_nfs_uint64_t(xdrs, &objp->offset) &&
824 xdr_uint32_t(xdrs, &objp->count) &&
825 xdr_stable_how(xdrs, &objp->stable))
826 return(xdr_bytes(xdrs, (char **)&objp->data.data_val,
827 (unsigned int *)&objp->data.data_len,
837 if (xdr_wcc_data(xdrs, &objp->file_wcc) &&
838 xdr_uint32_t(xdrs, &objp->count) &&
839 xdr_stable_how(xdrs, &objp->committed))
840 return(xdr_writeverf3(xdrs, objp->verf));
847 WRITE3resfail * objp)
849 return(xdr_wcc_data(xdrs, &objp->file_wcc));
857 if (!xdr_nfsstat3(xdrs, &objp->status))
859 if (objp->status == NFS3_OK)
860 return(xdr_WRITE3resok(xdrs, &objp->resok));
861 return(xdr_WRITE3resfail(xdrs, &objp->resfail));
870 return(xdr_enum(xdrs, (enum_t *)objp));
878 if (!xdr_createmode3(xdrs, &objp->mode))
880 switch (objp->mode) {
883 return(xdr_sattr3(xdrs, &objp->createhow3_u.obj_attributes));
885 return(xdr_createverf3(xdrs, objp->createhow3_u.verf));
896 if (xdr_diropargs3(xdrs, &objp->where))
897 return(xdr_createhow3(xdrs, &objp->how));
906 if (xdr_post_op_fh3(xdrs, &objp->obj) &&
907 xdr_post_op_attr(xdrs, &objp->obj_attributes))
908 return(xdr_wcc_data(xdrs, &objp->dir_wcc));
915 CREATE3resfail * objp)
917 return(xdr_wcc_data(xdrs, &objp->dir_wcc));
925 if (!xdr_nfsstat3(xdrs, &objp->status))
927 if (objp->status == NFS3_OK)
928 return(xdr_CREATE3resok(xdrs, &objp->resok));
929 return(xdr_CREATE3resfail(xdrs, &objp->resfail));
938 if (xdr_diropargs3(xdrs, &objp->where))
939 return(xdr_sattr3(xdrs, &objp->attributes));
948 if (xdr_post_op_fh3(xdrs, &objp->obj) &&
949 xdr_post_op_attr(xdrs, &objp->obj_attributes))
950 return(xdr_wcc_data(xdrs, &objp->dir_wcc));
957 MKDIR3resfail * objp)
959 return(xdr_wcc_data(xdrs, &objp->dir_wcc));
967 if (!xdr_nfsstat3(xdrs, &objp->status))
969 if (objp->status == NFS3_OK)
970 return(xdr_MKDIR3resok(xdrs, &objp->resok));
971 return(xdr_MKDIR3resfail(xdrs, &objp->resfail));
980 if (xdr_sattr3(xdrs, &objp->symlink_attributes))
981 return(xdr_nfspath3(xdrs, &objp->symlink_data));
990 if (xdr_diropargs3(xdrs, &objp->where))
991 return(xdr_symlinkdata3(xdrs, &objp->symlink));
998 SYMLINK3resok * objp)
1000 if (xdr_post_op_fh3(xdrs, &objp->obj) &&
1001 xdr_post_op_attr(xdrs, &objp->obj_attributes))
1002 return(xdr_wcc_data(xdrs, &objp->dir_wcc));
1007 xdr_SYMLINK3resfail(
1009 SYMLINK3resfail * objp)
1011 return(xdr_wcc_data(xdrs, &objp->dir_wcc));
1019 if (!xdr_nfsstat3(xdrs, &objp->status))
1021 if (objp->status == NFS3_OK)
1022 return(xdr_SYMLINK3resok(xdrs, &objp->resok));
1023 return(xdr_SYMLINK3resfail(xdrs, &objp->resfail));
1032 if (xdr_sattr3(xdrs, &objp->dev_attributes))
1033 return(xdr_specdata3(xdrs, &objp->spec));
1042 if (!xdr_ftype3(xdrs, &objp->type))
1044 switch (objp->type) {
1047 if (!xdr_devicedata3(xdrs, &objp->mknoddata3_u.device))
1052 if (!xdr_sattr3(xdrs, &objp->mknoddata3_u.pipe_attributes))
1064 if (xdr_diropargs3(xdrs, &objp->where))
1065 return(xdr_mknoddata3(xdrs, &objp->what));
1074 if (xdr_post_op_fh3(xdrs, &objp->obj) &&
1075 xdr_post_op_attr(xdrs, &objp->obj_attributes))
1076 return(xdr_wcc_data(xdrs, &objp->dir_wcc));
1083 MKNOD3resfail * objp)
1085 return(xdr_wcc_data(xdrs, &objp->dir_wcc));
1093 if (!xdr_nfsstat3(xdrs, &objp->status))
1095 if (objp->status == NFS3_OK)
1096 return(xdr_MKNOD3resok(xdrs, &objp->resok));
1097 return(xdr_MKNOD3resfail(xdrs, &objp->resfail));
1106 return(xdr_diropargs3(xdrs, &objp->object));
1112 REMOVE3resok * objp)
1114 return(xdr_wcc_data(xdrs, &objp->dir_wcc));
1120 REMOVE3resfail * objp)
1122 return(xdr_wcc_data(xdrs, &objp->dir_wcc));
1130 if (!xdr_nfsstat3(xdrs, &objp->status))
1132 if (objp->status == NFS3_OK)
1133 return(xdr_REMOVE3resok(xdrs, &objp->resok));
1134 return(xdr_REMOVE3resfail(xdrs, &objp->resfail));
1143 return(xdr_diropargs3(xdrs, &objp->object));
1151 return(xdr_wcc_data(xdrs, &objp->dir_wcc));
1157 RMDIR3resfail * objp)
1159 return(xdr_wcc_data(xdrs, &objp->dir_wcc));
1167 if (!xdr_nfsstat3(xdrs, &objp->status))
1169 if (objp->status == NFS3_OK)
1170 return(xdr_RMDIR3resok(xdrs, &objp->resok));
1171 return(xdr_RMDIR3resfail(xdrs, &objp->resfail));
1180 if (xdr_diropargs3(xdrs, &objp->from))
1181 return(xdr_diropargs3(xdrs, &objp->to));
1188 RENAME3resok * objp)
1190 if (xdr_wcc_data(xdrs, &objp->fromdir_wcc))
1191 return(xdr_wcc_data(xdrs, &objp->todir_wcc));
1198 RENAME3resfail * objp)
1200 if (xdr_wcc_data(xdrs, &objp->fromdir_wcc))
1201 return(xdr_wcc_data(xdrs, &objp->todir_wcc));
1210 if (!xdr_nfsstat3(xdrs, &objp->status))
1212 if (objp->status == NFS3_OK)
1213 return(xdr_RENAME3resok(xdrs, &objp->resok));
1214 return(xdr_RENAME3resfail(xdrs, &objp->resfail));
1223 if (xdr_nfs_fh3(xdrs, &objp->file))
1224 return(xdr_diropargs3(xdrs, &objp->link));
1233 if (xdr_post_op_attr(xdrs, &objp->file_attributes))
1234 return(xdr_wcc_data(xdrs, &objp->linkdir_wcc));
1241 LINK3resfail * objp)
1243 if (xdr_post_op_attr(xdrs, &objp->file_attributes))
1244 return(xdr_wcc_data(xdrs, &objp->linkdir_wcc));
1253 if (!xdr_nfsstat3(xdrs, &objp->status))
1255 if (objp->status == NFS3_OK)
1256 return(xdr_LINK3resok(xdrs, &objp->resok));
1257 return(xdr_LINK3resfail(xdrs, &objp->resfail));
1264 READDIR3args * objp)
1266 if (xdr_nfs_fh3(xdrs, &objp->dir) &&
1267 xdr_nfs_uint64_t(xdrs, &objp->cookie) &&
1268 xdr_cookieverf3(xdrs, objp->cookieverf))
1269 return(xdr_uint32_t(xdrs, &objp->count));
1273 #define roundtoint(x) (((x) + sizeof (int) - 1) & ~(sizeof (int) - 1))
1281 READDIR3resok * objp)
1285 unsigned int namlen;
1286 char name[SFS_MAXNAMLEN];
1287 nfs_uint64_t fileid, cookie;
1291 dp = objp->reply.entries;
1293 if (!xdr_bool(xdrs, &valid))
1297 if (!xdr_nfs_uint64_t(xdrs, &fileid) ||
1298 !xdr_u_int(xdrs, &namlen))
1300 if (namlen >= SFS_MAXNAMLEN)
1301 namlen = SFS_MAXNAMLEN - 1;
1302 if (!xdr_opaque(xdrs, name, namlen) ||
1303 !xdr_nfs_uint64_t(xdrs, &cookie))
1305 name[namlen] = '\0';
1306 if (i < SFS_MAXDIRENTS) {
1307 dp[i].fileid = fileid;
1308 (void)memmove(dp[i].name, name, (namlen+1));
1309 dp[i].cookie = cookie;
1314 if (!xdr_bool(xdrs, &objp->reply.eof))
1322 READDIR3resok * objp)
1324 if (!xdr_post_op_attr(xdrs, &objp->dir_attributes))
1326 if (!xdr_cookieverf3(xdrs, objp->cookieverf))
1328 if (xdrs->x_op == XDR_DECODE)
1329 return(xdr_getdirlist(xdrs, objp));
1334 xdr_READDIR3resfail(
1336 READDIR3resfail * objp)
1338 return(xdr_post_op_attr(xdrs, &objp->dir_attributes));
1346 if (!xdr_nfsstat3(xdrs, &objp->status))
1348 if (objp->status == NFS3_OK)
1349 return(xdr_READDIR3resok(xdrs, &objp->resok));
1350 return(xdr_READDIR3resfail(xdrs, &objp->resfail));
1354 xdr_READDIRPLUS3args(
1356 READDIRPLUS3args * objp)
1358 if (xdr_nfs_fh3(xdrs, &objp->dir) &&
1359 xdr_nfs_uint64_t(xdrs, &objp->cookie) &&
1360 xdr_cookieverf3(xdrs, objp->cookieverf) &&
1361 xdr_uint32_t(xdrs, &objp->dircount))
1362 return(xdr_uint32_t(xdrs, &objp->maxcount));
1367 * copy post_op_attr from s2 to s1
1370 copy_post_op_attr(post_op_attr *s1, post_op_attr *s2)
1372 s1->attributes = s2->attributes;
1373 (void) memmove((void *) &s1->attr, (void *) &s2->attr,
1378 * copy post_op_fh3 from s2 to s1
1381 copy_post_op_fh3(post_op_fh3 *s1, post_op_fh3 *s2)
1383 s1->handle_follows = s2->handle_follows;
1384 (void) memmove((void *) &s1->handle, (void *) &s2->handle,
1394 READDIRPLUS3resok * objp)
1398 unsigned int namlen;
1399 char name[SFS_MAXNAMLEN];
1400 nfs_uint64_t fileid, cookie;
1406 dp = objp->reply.entries;
1408 if (!xdr_bool(xdrs, &valid))
1412 if (!xdr_nfs_uint64_t(xdrs, &fileid) ||
1413 !xdr_u_int(xdrs, &namlen))
1415 if (namlen >= SFS_MAXNAMLEN)
1416 namlen = SFS_MAXNAMLEN - 1;
1417 if (!xdr_opaque(xdrs, name, namlen) ||
1418 !xdr_nfs_uint64_t(xdrs, &cookie))
1420 name[namlen] = '\0';
1421 if (!xdr_post_op_attr(xdrs, &at))
1423 if (!xdr_post_op_fh3(xdrs, &fh))
1425 if (i < SFS_MAXDIRENTS) {
1426 dp[i].fileid = fileid;
1427 (void)memmove(dp[i].name, name, (namlen+1));
1428 dp[i].cookie = cookie;
1429 copy_post_op_attr(&dp[i].name_attributes, &at);
1430 copy_post_op_fh3(&dp[i].name_handle, &fh);
1436 if (!xdr_bool(xdrs, &objp->reply.eof))
1442 xdr_READDIRPLUS3resok(
1444 READDIRPLUS3resok * objp)
1447 if (!xdr_post_op_attr(xdrs, &objp->dir_attributes))
1449 if (!xdr_cookieverf3(xdrs, objp->cookieverf))
1451 if (xdrs->x_op == XDR_DECODE)
1452 return(xdr_getdirpluslist(xdrs, objp));
1457 xdr_READDIRPLUS3resfail(
1459 READDIRPLUS3resfail * objp)
1461 return(xdr_post_op_attr(xdrs, &objp->dir_attributes));
1465 xdr_READDIRPLUS3res(
1467 READDIRPLUS3res * objp)
1469 if (!xdr_nfsstat3(xdrs, &objp->status))
1471 if (objp->status == NFS3_OK)
1472 return(xdr_READDIRPLUS3resok(xdrs, &objp->resok));
1473 return(xdr_READDIRPLUS3resfail(xdrs, &objp->resfail));
1481 return(xdr_nfs_fh3(xdrs, &objp->fsroot));
1487 FSSTAT3resok * objp)
1489 if (!xdr_post_op_attr(xdrs, &objp->obj_attributes))
1491 if (!xdr_nfs_uint64_t(xdrs, &objp->tbytes))
1493 if (!xdr_nfs_uint64_t(xdrs, &objp->fbytes))
1495 if (!xdr_nfs_uint64_t(xdrs, &objp->abytes))
1497 if (!xdr_nfs_uint64_t(xdrs, &objp->tfiles))
1499 if (!xdr_nfs_uint64_t(xdrs, &objp->ffiles))
1501 if (!xdr_nfs_uint64_t(xdrs, &objp->afiles))
1503 if (!xdr_uint32_t(xdrs, &objp->invarsec))
1511 FSSTAT3resfail * objp)
1513 return(xdr_post_op_attr(xdrs, &objp->obj_attributes));
1521 if (!xdr_nfsstat3(xdrs, &objp->status))
1523 if (objp->status == NFS3_OK)
1524 return(xdr_FSSTAT3resok(xdrs, &objp->resok));
1525 return(xdr_FSSTAT3resfail(xdrs, &objp->resfail));
1533 return(xdr_nfs_fh3(xdrs, &objp->fsroot));
1539 FSINFO3resok * objp)
1541 if (!xdr_post_op_attr(xdrs, &objp->obj_attributes))
1543 if (!xdr_uint32_t(xdrs, &objp->rtmax))
1545 if (!xdr_uint32_t(xdrs, &objp->rtpref))
1547 if (!xdr_uint32_t(xdrs, &objp->rtmult))
1549 if (!xdr_uint32_t(xdrs, &objp->wtmax))
1551 if (!xdr_uint32_t(xdrs, &objp->wtpref))
1553 if (!xdr_uint32_t(xdrs, &objp->wtmult))
1555 if (!xdr_uint32_t(xdrs, &objp->dtpref))
1557 if (!xdr_nfs_uint64_t(xdrs, &objp->maxfilesize))
1559 if (!xdr_nfstime3(xdrs, &objp->time_delta))
1561 if (!xdr_uint32_t(xdrs, &objp->properties))
1569 FSINFO3resfail * objp)
1571 return(xdr_post_op_attr(xdrs, &objp->obj_attributes));
1579 if (!xdr_nfsstat3(xdrs, &objp->status))
1581 if (objp->status == NFS3_OK)
1582 return(xdr_FSINFO3resok(xdrs, &objp->resok));
1583 return(xdr_FSINFO3resfail(xdrs, &objp->resfail));
1589 PATHCONF3args * objp)
1591 return(xdr_nfs_fh3(xdrs, &objp->object));
1597 PATHCONF3resok * objp)
1599 if (!xdr_post_op_attr(xdrs, &objp->obj_attributes))
1601 if (!xdr_uint32_t(xdrs, &objp->link_max))
1603 if (!xdr_uint32_t(xdrs, &objp->name_max))
1605 if (!xdr_bool(xdrs, &objp->no_trunc))
1607 if (!xdr_bool(xdrs, &objp->chown_restricted))
1609 if (!xdr_bool(xdrs, &objp->case_insensitive))
1611 if (!xdr_bool(xdrs, &objp->case_preserving))
1617 xdr_PATHCONF3resfail(
1619 PATHCONF3resfail * objp)
1621 return(xdr_post_op_attr(xdrs, &objp->obj_attributes));
1627 PATHCONF3res * objp)
1629 if (!xdr_nfsstat3(xdrs, &objp->status))
1631 if (objp->status == NFS3_OK)
1632 return(xdr_PATHCONF3resok(xdrs, &objp->resok));
1633 return(xdr_PATHCONF3resfail(xdrs, &objp->resfail));
1641 if (xdr_nfs_fh3(xdrs, &objp->file) &&
1642 xdr_nfs_uint64_t(xdrs, &objp->offset))
1643 return(xdr_uint32_t(xdrs, &objp->count));
1650 COMMIT3resok * objp)
1652 if (xdr_wcc_data(xdrs, &objp->file_wcc))
1653 return(xdr_writeverf3(xdrs, objp->verf));
1660 COMMIT3resfail * objp)
1662 return(xdr_wcc_data(xdrs, &objp->file_wcc));
1670 if (!xdr_nfsstat3(xdrs, &objp->status))
1672 if (objp->status == NFS3_OK)
1673 return(xdr_COMMIT3resok(xdrs, &objp->resok));
1674 return(xdr_COMMIT3resfail(xdrs, &objp->resfail));
1683 return(xdr_string(xdrs, objp, MNTPATHLEN));
1691 return(xdr_bytes(xdrs, (char **) &objp->fhandle3_val,
1692 (unsigned int *) &objp->fhandle3_len, NFS3_FHSIZE));
1700 if (xdr_fhandle3(xdrs, &objp->fhandle)) {
1701 return(xdr_array(xdrs,
1702 (void **) &objp->auth_flavors.auth_flavors_val,
1703 (unsigned int *) &objp->auth_flavors.auth_flavors_len,
1704 ~0, sizeof (int), (xdrproc_t) xdr_int));
1714 if (!xdr_enum(xdrs, (enum_t *) &objp->fhs_status))
1716 if (objp->fhs_status == MNT_OK)
1717 return(xdr_mntres3_ok(xdrs, &objp->mntres3_u.mntinfo));