/* * 2.2.14. symlinkargs * * struct symlinkargs { * diropargs from; * path to; * sattr attributes; * }; */ static void nfs2_xdr_enc_symlinkargs(struct rpc_rqst *req, struct xdr_stream *xdr, const struct nfs_symlinkargs *args) { encode_diropargs(xdr, args->fromfh, args->fromname, args->fromlen); encode_path(xdr, args->pages, args->pathlen); encode_sattr(xdr, args->sattr); }
int get_handle(int nodeid, int diskid, int mapid, fhandle3 *filehandle) { CLIENT *clnt = NULL; int error = 0; char nodeAddr[32]; char *diskPath = NULL; diskPath = (char*)malloc(MNTPATHLEN); if (!diskPath) { return(1); } snprintf(nodeAddr, sizeof(nodeAddr), "%s.%d", INTERNAL_SUBNET, nodeid + NODEBASEID); encode_path(diskid, mapid, diskPath, MNTPATHLEN); clnt = clnt_create_timed(nodeAddr, MOUNT_PROGRAM, MOUNT_V3, "udp", &HCRPC_TIMEOUT); if (!clnt) { free(diskPath); log_error("clnt_create failed(%d, %d)", nodeid, diskid); return(1); } error = single_mount(clnt, diskPath, filehandle); if (clnt) { clnt_destroy(clnt); clnt = NULL; } if (diskPath) { free(diskPath); diskPath = NULL; } return(error); }
String encode_path(const String &path) { String encoded; encode_path(std::begin(path), std::end(path), std::back_inserter(encoded)); return encoded; }