int vfs_readlink(struct vfs_fsal_obj_handle *hdl, fsal_errors_t *ferr) { char ldata[MAXPATHLEN + 1]; int retval; LogXFSHandle(hdl->handle); retval = readlink_by_handle(hdl->handle->handle_data, hdl->handle->handle_len, ldata, sizeof(ldata)); if (retval < 0) { retval = -errno; *ferr = posix2fsal_error(retval); goto out; } ldata[retval] = '\0'; hdl->u.symlink.link_content = gsh_strdup(ldata); if (hdl->u.symlink.link_content == NULL) { *ferr = ERR_FSAL_NOMEM; retval = -ENOMEM; } else { hdl->u.symlink.link_size = retval + 1; retval = 0; } out: return retval; }
intgen_t jdm_readlink( jdm_fshandle_t *fshp, xfs_bstat_t *statp, char *bufp, size_t bufsz ) { register fshandle_t *fshandlep = ( fshandle_t * )fshp; filehandle_t filehandle; intgen_t rval; jdm_fill_filehandle( &filehandle, fshandlep, statp ); rval = readlink_by_handle( ( void * )&filehandle, sizeof( filehandle ), ( void * )bufp, bufsz ); return rval; }