xdr_nfs.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:12k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* xdr_nfs.c  - xdr routines for nfs */
  2. /* Copyright 1984-1997 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01i,26aug97,spm  removed compiler warnings (SPR #7866)
  8. 01h,08sep94,jmm  replaced all routines with routines from rpcgen
  9. 01g,15sep92,jcf  changed "struct name" to "struct nfsName".
  10. 01f,26may92,rrr  the tree shuffle
  11. 01e,19nov91,rrr  shut up some ansi warnings.
  12. 01d,04oct91,rrr  passed through the ansification filter
  13.                   -changed functions to ansi style
  14.   -changed includes to have absolute path from h/
  15.   -changed copyright notice
  16. 01c,15may90,dnw  fixed bug in xdr_{pathstat,attrstat,diropres,readreply,
  17.    readdirres} of returning FALSE if returned NFS status
  18.    was not NFS_OK, and xdr_{mountentries,exportbody} returning
  19.    FALSE if more_entries was FALSE.  This had the effect of
  20.    invalidating the entire RPC reply (hence RPC_CANTDECODERES).
  21.    This was due to a mistake in the original xdr_nfs.x file
  22.    that had no "default" case specifed for these unions
  23.    (should be "default: void;").
  24.  changed to use POSIX NAME_MAX from dirent.h:
  25.    - xdr_filename to take NAME_MAX instead of NFS_MAXNAMLEN
  26.    - xdr_path to take PATH_MAX instead of NFS_MAXPATHLEN
  27.  recoded xdr_mountlist and xdr_mountentries to not be recursive.
  28.    This is patterned after the discussion in the "Advanced
  29.    Topics" chapter of the "XDR: Sun Technical Notes" document
  30.    (xdr.nts.ms distributed with rpc 4.0), except that I
  31.    believe the example in the document is wrong.  The example
  32.    references memory that may have been freed, even though
  33.    the narrative says they are avoiding exactly that.
  34.    Note that xdr_readdirres and xdr_exportbody remain
  35.    recursive, although they could be coded in the same way
  36.    as xdr_mountentries.
  37.  added xdr_readdirresOne which reads only one entry from
  38.    a directory read request, and discards the rest.
  39.    This is used by nfsDirReadOne() in nfsLib and is strictly
  40.    a hack to avoid unnecessary malloc/frees for the unwanted
  41.    additional entries.
  42. 01b,20oct89,hjb  changed "struct timeval" to nfsTimeval to avoid conflicts
  43.  with the definition of "struct timeval" in "utime.h".
  44. 01a,19apr88,llk  created.
  45. */
  46. /*
  47. DESCRIPTION
  48. This module contains the eXternal Data Representation (XDR) routines for NFS.
  49. This module could (and should) be generated from a .x, but there have
  50. been tweaks as noted in the mod history above.
  51. As of 8 Sep 1994, the routines in this file are exactly as generated from
  52. rpcgen.  All of the old modified routines have been removed.
  53. */
  54. /*
  55.  * Please do not edit this file.
  56.  * It was generated using rpcgen.
  57.  */
  58. #include <rpc/rpc.h>
  59. #include "xdr_nfs.h"
  60. bool_t
  61. xdr_nfsstat(xdrs, objp)
  62. XDR *xdrs;
  63. nfsstat *objp;
  64. {
  65. if (!xdr_enum(xdrs, (enum_t *)objp)) {
  66. return (FALSE);
  67. }
  68. return (TRUE);
  69. }
  70. bool_t
  71. xdr_ftype(xdrs, objp)
  72. XDR *xdrs;
  73. ftype *objp;
  74. {
  75. if (!xdr_enum(xdrs, (enum_t *)objp)) {
  76. return (FALSE);
  77. }
  78. return (TRUE);
  79. }
  80. bool_t
  81. xdr_nfs_fh(xdrs, objp)
  82. XDR *xdrs;
  83. nfs_fh *objp;
  84. {
  85. if (!xdr_opaque(xdrs, objp->data, NFS_FHSIZE)) {
  86. return (FALSE);
  87. }
  88. return (TRUE);
  89. }
  90. bool_t
  91. xdr_nfstime(xdrs, objp)
  92. XDR *xdrs;
  93. nfstime *objp;
  94. {
  95. if (!xdr_u_int(xdrs, &objp->seconds)) {
  96. return (FALSE);
  97. }
  98. if (!xdr_u_int(xdrs, &objp->useconds)) {
  99. return (FALSE);
  100. }
  101. return (TRUE);
  102. }
  103. bool_t
  104. xdr_fattr(xdrs, objp)
  105. XDR *xdrs;
  106. fattr *objp;
  107. {
  108. if (!xdr_ftype(xdrs, &objp->type)) {
  109. return (FALSE);
  110. }
  111. if (!xdr_u_int(xdrs, &objp->mode)) {
  112. return (FALSE);
  113. }
  114. if (!xdr_u_int(xdrs, &objp->nlink)) {
  115. return (FALSE);
  116. }
  117. if (!xdr_u_int(xdrs, &objp->uid)) {
  118. return (FALSE);
  119. }
  120. if (!xdr_u_int(xdrs, &objp->gid)) {
  121. return (FALSE);
  122. }
  123. if (!xdr_u_int(xdrs, &objp->size)) {
  124. return (FALSE);
  125. }
  126. if (!xdr_u_int(xdrs, &objp->blocksize)) {
  127. return (FALSE);
  128. }
  129. if (!xdr_u_int(xdrs, &objp->rdev)) {
  130. return (FALSE);
  131. }
  132. if (!xdr_u_int(xdrs, &objp->blocks)) {
  133. return (FALSE);
  134. }
  135. if (!xdr_u_int(xdrs, &objp->fsid)) {
  136. return (FALSE);
  137. }
  138. if (!xdr_u_int(xdrs, &objp->fileid)) {
  139. return (FALSE);
  140. }
  141. if (!xdr_nfstime(xdrs, &objp->atime)) {
  142. return (FALSE);
  143. }
  144. if (!xdr_nfstime(xdrs, &objp->mtime)) {
  145. return (FALSE);
  146. }
  147. if (!xdr_nfstime(xdrs, &objp->ctime)) {
  148. return (FALSE);
  149. }
  150. return (TRUE);
  151. }
  152. bool_t
  153. xdr_sattr(xdrs, objp)
  154. XDR *xdrs;
  155. sattr *objp;
  156. {
  157. if (!xdr_u_int(xdrs, &objp->mode)) {
  158. return (FALSE);
  159. }
  160. if (!xdr_u_int(xdrs, &objp->uid)) {
  161. return (FALSE);
  162. }
  163. if (!xdr_u_int(xdrs, &objp->gid)) {
  164. return (FALSE);
  165. }
  166. if (!xdr_u_int(xdrs, &objp->size)) {
  167. return (FALSE);
  168. }
  169. if (!xdr_nfstime(xdrs, &objp->atime)) {
  170. return (FALSE);
  171. }
  172. if (!xdr_nfstime(xdrs, &objp->mtime)) {
  173. return (FALSE);
  174. }
  175. return (TRUE);
  176. }
  177. bool_t
  178. xdr_filename(xdrs, objp)
  179. XDR *xdrs;
  180. filename *objp;
  181. {
  182. if (!xdr_string(xdrs, objp, NFS_MAXNAMLEN)) {
  183. return (FALSE);
  184. }
  185. return (TRUE);
  186. }
  187. bool_t
  188. xdr_nfspath(xdrs, objp)
  189. XDR *xdrs;
  190. nfspath *objp;
  191. {
  192. if (!xdr_string(xdrs, objp, NFS_MAXPATHLEN)) {
  193. return (FALSE);
  194. }
  195. return (TRUE);
  196. }
  197. bool_t xdr_attrstat
  198.     (
  199.     XDR *xdrs,
  200.     attrstat *objp
  201.     )
  202.     {
  203.     if (!xdr_nfsstat (xdrs, &objp->status)) 
  204.         {
  205.         return (FALSE);
  206.         }
  207.     switch (objp->status) 
  208.         {
  209.         case NFS_OK:
  210.             if (!xdr_fattr (xdrs, &objp->attrstat_u.attributes)) 
  211.                 {
  212.                 return (FALSE);
  213.                 }
  214.             break;
  215.         default:    /* Eliminates warnings for other enumeration values. */
  216.             break;
  217.         }
  218.     return (TRUE);
  219.     }
  220. bool_t
  221. xdr_sattrargs(xdrs, objp)
  222. XDR *xdrs;
  223. sattrargs *objp;
  224. {
  225. if (!xdr_nfs_fh(xdrs, &objp->file)) {
  226. return (FALSE);
  227. }
  228. if (!xdr_sattr(xdrs, &objp->attributes)) {
  229. return (FALSE);
  230. }
  231. return (TRUE);
  232. }
  233. bool_t
  234. xdr_diropargs(xdrs, objp)
  235. XDR *xdrs;
  236. diropargs *objp;
  237. {
  238. if (!xdr_nfs_fh(xdrs, &objp->dir)) {
  239. return (FALSE);
  240. }
  241. if (!xdr_filename(xdrs, &objp->name)) {
  242. return (FALSE);
  243. }
  244. return (TRUE);
  245. }
  246. bool_t
  247. xdr_diropokres(xdrs, objp)
  248. XDR *xdrs;
  249. diropokres *objp;
  250. {
  251. if (!xdr_nfs_fh(xdrs, &objp->file)) {
  252. return (FALSE);
  253. }
  254. if (!xdr_fattr(xdrs, &objp->attributes)) {
  255. return (FALSE);
  256. }
  257. return (TRUE);
  258. }
  259. bool_t xdr_diropres
  260.     (
  261.     XDR *xdrs,
  262.     diropres *objp
  263.     )
  264.     {
  265.     if (!xdr_nfsstat (xdrs, &objp->status)) 
  266.         {
  267.         return (FALSE);
  268.         }
  269.     switch (objp->status) 
  270.         {
  271. case NFS_OK:
  272.             if (!xdr_diropokres (xdrs, &objp->diropres_u.diropres)) 
  273.                 {
  274.                 return (FALSE);
  275.                 }
  276.         break;
  277.         default:    /* Eliminates warnings for other enumeration values. */
  278.             break;
  279.         }
  280.     return (TRUE);
  281.     }
  282. bool_t xdr_readlinkres
  283.     (
  284.     XDR *xdrs,
  285.     readlinkres *objp
  286.     )
  287.     {
  288.     if (!xdr_nfsstat (xdrs, &objp->status)) 
  289.         {
  290.         return (FALSE);
  291.         }
  292.     switch (objp->status) 
  293.         {
  294.         case NFS_OK:
  295.             if (!xdr_nfspath (xdrs, &objp->readlinkres_u.data)) 
  296.                 {
  297.                 return (FALSE);
  298.                 }
  299.             break;
  300.         default:    /* Eliminates warnings for other enumeration values. */
  301.             break;
  302.         }
  303.     return (TRUE);
  304.     }
  305. bool_t
  306. xdr_readargs(xdrs, objp)
  307. XDR *xdrs;
  308. readargs *objp;
  309. {
  310. if (!xdr_nfs_fh(xdrs, &objp->file)) {
  311. return (FALSE);
  312. }
  313. if (!xdr_u_int(xdrs, &objp->offset)) {
  314. return (FALSE);
  315. }
  316. if (!xdr_u_int(xdrs, &objp->count)) {
  317. return (FALSE);
  318. }
  319. if (!xdr_u_int(xdrs, &objp->totalcount)) {
  320. return (FALSE);
  321. }
  322. return (TRUE);
  323. }
  324. bool_t
  325. xdr_readokres(xdrs, objp)
  326. XDR *xdrs;
  327. readokres *objp;
  328. {
  329. if (!xdr_fattr(xdrs, &objp->attributes)) {
  330. return (FALSE);
  331. }
  332. if (!xdr_bytes(xdrs, (char **)&objp->data.data_val, (u_int *)&objp->data.data_len, NFS_MAXDATA)) {
  333. return (FALSE);
  334. }
  335. return (TRUE);
  336. }
  337. bool_t xdr_readres
  338.     (
  339.     XDR *xdrs,
  340.     readres *objp
  341.     )
  342.     {
  343.     if (!xdr_nfsstat (xdrs, &objp->status)) 
  344.         {
  345.         return (FALSE);
  346.         }
  347.     switch (objp->status) 
  348.         {
  349.         case NFS_OK:
  350.             if (!xdr_readokres(xdrs, &objp->readres_u.reply)) 
  351.                 {
  352.                 return (FALSE);
  353.                 }
  354.             break;
  355.         default:    /* Eliminates warnings for other enumeration values. */
  356.             break;
  357.         }
  358.     return (TRUE);
  359.     }
  360. bool_t
  361. xdr_writeargs(xdrs, objp)
  362. XDR *xdrs;
  363. writeargs *objp;
  364. {
  365. if (!xdr_nfs_fh(xdrs, &objp->file)) {
  366. return (FALSE);
  367. }
  368. if (!xdr_u_int(xdrs, &objp->beginoffset)) {
  369. return (FALSE);
  370. }
  371. if (!xdr_u_int(xdrs, &objp->offset)) {
  372. return (FALSE);
  373. }
  374. if (!xdr_u_int(xdrs, &objp->totalcount)) {
  375. return (FALSE);
  376. }
  377. if (!xdr_bytes(xdrs, (char **)&objp->data.data_val, (u_int *)&objp->data.data_len, NFS_MAXDATA)) {
  378. return (FALSE);
  379. }
  380. return (TRUE);
  381. }
  382. bool_t
  383. xdr_createargs(xdrs, objp)
  384. XDR *xdrs;
  385. createargs *objp;
  386. {
  387. if (!xdr_diropargs(xdrs, &objp->where)) {
  388. return (FALSE);
  389. }
  390. if (!xdr_sattr(xdrs, &objp->attributes)) {
  391. return (FALSE);
  392. }
  393. return (TRUE);
  394. }
  395. bool_t
  396. xdr_renameargs(xdrs, objp)
  397. XDR *xdrs;
  398. renameargs *objp;
  399. {
  400. if (!xdr_diropargs(xdrs, &objp->from)) {
  401. return (FALSE);
  402. }
  403. if (!xdr_diropargs(xdrs, &objp->to)) {
  404. return (FALSE);
  405. }
  406. return (TRUE);
  407. }
  408. bool_t
  409. xdr_linkargs(xdrs, objp)
  410. XDR *xdrs;
  411. linkargs *objp;
  412. {
  413. if (!xdr_nfs_fh(xdrs, &objp->from)) {
  414. return (FALSE);
  415. }
  416. if (!xdr_diropargs(xdrs, &objp->to)) {
  417. return (FALSE);
  418. }
  419. return (TRUE);
  420. }
  421. bool_t
  422. xdr_symlinkargs(xdrs, objp)
  423. XDR *xdrs;
  424. symlinkargs *objp;
  425. {
  426. if (!xdr_diropargs(xdrs, &objp->from)) {
  427. return (FALSE);
  428. }
  429. if (!xdr_nfspath(xdrs, &objp->to)) {
  430. return (FALSE);
  431. }
  432. if (!xdr_sattr(xdrs, &objp->attributes)) {
  433. return (FALSE);
  434. }
  435. return (TRUE);
  436. }
  437. bool_t
  438. xdr_nfscookie(xdrs, objp)
  439. XDR *xdrs;
  440. nfscookie objp;
  441. {
  442. if (!xdr_opaque(xdrs, objp, NFS_COOKIESIZE)) {
  443. return (FALSE);
  444. }
  445. return (TRUE);
  446. }
  447. bool_t
  448. xdr_readdirargs(xdrs, objp)
  449. XDR *xdrs;
  450. readdirargs *objp;
  451. {
  452. if (!xdr_nfs_fh(xdrs, &objp->dir)) {
  453. return (FALSE);
  454. }
  455. if (!xdr_nfscookie(xdrs, objp->cookie)) {
  456. return (FALSE);
  457. }
  458. if (!xdr_u_int(xdrs, &objp->count)) {
  459. return (FALSE);
  460. }
  461. return (TRUE);
  462. }
  463. bool_t
  464. xdr_entry(xdrs, objp)
  465. XDR *xdrs;
  466. entry *objp;
  467. {
  468. if (!xdr_u_int(xdrs, &objp->fileid)) {
  469. return (FALSE);
  470. }
  471. if (!xdr_filename(xdrs, &objp->name)) {
  472. return (FALSE);
  473. }
  474. if (!xdr_nfscookie(xdrs, objp->cookie)) {
  475. return (FALSE);
  476. }
  477. if (!xdr_pointer(xdrs, (char **)&objp->nextentry, sizeof(entry), xdr_entry)) {
  478. return (FALSE);
  479. }
  480. return (TRUE);
  481. }
  482. bool_t
  483. xdr_dirlist(xdrs, objp)
  484. XDR *xdrs;
  485. dirlist *objp;
  486. {
  487. if (!xdr_pointer(xdrs, (char **)&objp->entries, sizeof(entry), xdr_entry)) {
  488. return (FALSE);
  489. }
  490. if (!xdr_bool(xdrs, &objp->eof)) {
  491. return (FALSE);
  492. }
  493. return (TRUE);
  494. }
  495. bool_t xdr_readdirres
  496.     (
  497.     XDR *xdrs,
  498.     readdirres *objp
  499.     )
  500.     {
  501.     if (!xdr_nfsstat (xdrs, &objp->status)) 
  502.         {
  503.         return (FALSE);
  504.         }
  505.     switch (objp->status) 
  506.         {
  507.         case NFS_OK:
  508.             if (!xdr_dirlist (xdrs, &objp->readdirres_u.reply)) 
  509.                 {
  510.                 return (FALSE);
  511.                 }
  512.             break;
  513.         default:    /* Eliminates warnings for other enumeration values. */
  514.             break;
  515. }
  516.     return (TRUE);
  517.     }
  518. bool_t
  519. xdr_statfsokres(xdrs, objp)
  520. XDR *xdrs;
  521. statfsokres *objp;
  522. {
  523. if (!xdr_u_int(xdrs, &objp->tsize)) {
  524. return (FALSE);
  525. }
  526. if (!xdr_u_int(xdrs, &objp->bsize)) {
  527. return (FALSE);
  528. }
  529. if (!xdr_u_int(xdrs, &objp->blocks)) {
  530. return (FALSE);
  531. }
  532. if (!xdr_u_int(xdrs, &objp->bfree)) {
  533. return (FALSE);
  534. }
  535. if (!xdr_u_int(xdrs, &objp->bavail)) {
  536. return (FALSE);
  537. }
  538. return (TRUE);
  539. }
  540. bool_t xdr_statfsres
  541.     (
  542.     XDR *xdrs,
  543.     statfsres *objp
  544.     )
  545.     {
  546.     if (!xdr_nfsstat(xdrs, &objp->status)) 
  547.         {
  548.         return (FALSE);
  549.         }
  550.     switch (objp->status) 
  551.         {
  552.         case NFS_OK:
  553.             if (!xdr_statfsokres(xdrs, &objp->statfsres_u.reply)) 
  554.                 {
  555.                 return (FALSE);
  556.                 }
  557.             break;
  558.         default:    /* Eliminates warnings for other enumeration values. */
  559.             break;
  560.         }
  561.     return (TRUE);
  562.     }