|
|
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.