void afsnode::nfs3_fsstat (svccb *sbp) { fsstat3res res (NFS3_OK); rpc_clear (res); sbp->reply (&res); }
/** * \ingroup dblib_rpc * \brief Initialize a remote procedure call. * * \param dbproc contains all information needed by db-lib to manage communications with the server. * \param rpcname name of the stored procedure to be run. * \param options Only supported option would be DBRPCRECOMPILE, * which causes the stored procedure to be recompiled before executing. * \remark The RPC functions are the only way to get back OUTPUT parameter data with db-lib * from modern Microsoft servers. * \todo I don't know the value for DBRPCRECOMPILE and have not added it to sybdb.h * \retval SUCCEED normal. * \retval FAIL on error * \sa dbrpcparam(), dbrpcsend() */ RETCODE dbrpcinit(DBPROCESS * dbproc, char *rpcname, DBSMALLINT options) { DBREMOTE_PROC **rpc; int dbrpcrecompile = 0; /* sanity */ if (dbproc == NULL || rpcname == NULL) return FAIL; if (options & DBRPCRESET) { rpc_clear(dbproc->rpc); dbproc->rpc = NULL; return SUCCEED; } /* any bits we want from the options argument */ dbrpcrecompile = options & DBRPCRECOMPILE; options &= ~DBRPCRECOMPILE; /* turn that one off, now that we've extracted it */ /* all other options except DBRPCRECOMPILE are invalid */ if (options) { /* should show client error message */ return FAIL; } /* to allocate, first find a free node */ for (rpc = &dbproc->rpc; *rpc != NULL; rpc = &(*rpc)->next) { /* check existing nodes for name match (there shouldn't be one) */ if (!(*rpc)->name) return FAIL; if (strcmp((*rpc)->name, rpcname) == 0) return FAIL /* dbrpcsend should free pointer */ ; } /* rpc now contains the address of the dbproc's first empty (null) DBREMOTE_PROC* */ /* allocate */ *rpc = (DBREMOTE_PROC *) malloc(sizeof(DBREMOTE_PROC)); if (*rpc == NULL) return FAIL; memset(*rpc, 0, sizeof(DBREMOTE_PROC)); (*rpc)->name = strdup(rpcname); if ((*rpc)->name == NULL) { free(*rpc); *rpc = NULL; return FAIL; } /* store */ (*rpc)->options = options & DBRPCRECOMPILE; (*rpc)->param_list = NULL; /* completed */ tdsdump_log(TDS_DBG_INFO1, "dbrpcinit() added rpcname \"%s\"\n", rpcname); return SUCCEED; }
void filesrv::gotmps (bool ok) { if (!ok) { (*cb) (false); return; } ref<erraccum> ea (New refcounted<erraccum> (wrap (this, &filesrv::gotdds))); for (size_t i = 0; i < fstab.size (); i++) for (int mp = 0; mp < 2; mp++) { ref<readdir3res> res (New refcounted<readdir3res>); rpc_clear (*res); res->resok->reply.entries.alloc (); rpc_clear (*res->resok->reply.entries); gotrdres (ea, res, i, mp, RPC_SUCCESS); } }
/** * \ingroup dblib_rpc * \brief Execute the procedure and free associated memory * * \param dbproc contains all information needed by db-lib to manage communications with the server. * \retval SUCCEED normal. * \retval FAIL on error * \sa dbrpcinit(), dbrpcparam() */ RETCODE dbrpcsend(DBPROCESS * dbproc) { DBREMOTE_PROC *rpc; /* sanity */ if (dbproc == NULL || dbproc->rpc == NULL /* dbrpcinit should allocate pointer */ || dbproc->rpc->name == NULL) { /* can't be ready without a name */ return FAIL; } dbproc->dbresults_state = _DB_RES_INIT; /* FIXME do stuff */ tdsdump_log(TDS_DBG_FUNC, "dbrpcsend()\n"); for (rpc = dbproc->rpc; rpc != NULL; rpc = rpc->next) { int erc; TDSPARAMINFO *pparam_info = NULL; /* * [email protected]: allow stored procedures to have no * paramaters */ if (rpc->param_list != NULL) { pparam_info = param_info_alloc(dbproc->tds_socket, rpc); if (!pparam_info) return FAIL; } erc = tds_submit_rpc(dbproc->tds_socket, dbproc->rpc->name, pparam_info); tds_free_param_results(pparam_info); if (erc == TDS_FAIL) return FAIL; } /* free up the memory */ rpc_clear(dbproc->rpc); dbproc->rpc = NULL; return SUCCEED; }