bool_t xdr_lookup( XDR * xdrs, char * params_ptr) { diropargs * diropargs_ptr; diropres * diropres_ptr; switch(xdrs->x_op) { case XDR_ENCODE: /* LINTED pointer cast */ diropargs_ptr = (diropargs *) params_ptr; return(xdr_f_handle(xdrs, &diropargs_ptr->dir) && xdr_path(xdrs, &diropargs_ptr->name)); case XDR_DECODE: /* LINTED pointer cast */ diropres_ptr = (diropres *) params_ptr; return(xdr_diropres(xdrs, diropres_ptr)); default: return(FALSE); } /* switch on operation */ }
bool_t xdr_mkdir( XDR * xdrs, char * params_ptr) { mkdirargs * mkdirargs_ptr; diropres * diropres_ptr; switch (xdrs->x_op) { case XDR_ENCODE: /* LINTED pointer cast */ mkdirargs_ptr = (mkdirargs *) params_ptr; return(xdr_diropargs(xdrs, &mkdirargs_ptr->where) && xdr_sattr(xdrs, &mkdirargs_ptr->attributes)); case XDR_DECODE: /* LINTED pointer cast */ diropres_ptr = (diropres *) params_ptr; return(xdr_diropres(xdrs, diropres_ptr)); default: return(FALSE); } /* switch on operation */ }
void nfs2_reply(struct xid_map *xm, struct tuple4 *addr, u_char *buf, int len) { XDR xdrs; struct diropres dres; struct readres rres; switch (xm->proc) { case NFSPROC_LOOKUP: xdrmem_create(&xdrs, buf, len, XDR_DECODE); memset(&dres, 0, sizeof(dres)); if (xdr_diropres(&xdrs, &dres)) { if (dres.status == NFS_OK) fh_map_add((char *)xm->data, dres.diropres_u.diropres.file.data, NFS_FHSIZE); } xdr_destroy(&xdrs); break; case NFSPROC_READ: xdrmem_create(&xdrs, buf, len, XDR_DECODE); memset(&rres, 0, sizeof(rres)); if (xdr_readres(&xdrs, &rres)) { if (rres.status == NFS_OK) { nfs_save(addr, (struct myreadargs *)xm->data, rres.readres_u.reply.data.data_val, rres.readres_u.reply.data.data_len); } } xdr_destroy(&xdrs); break; } }