--- libaitrpc/src/lists.c 2012/05/16 07:54:49 1.9.2.2 +++ libaitrpc/src/lists.c 2012/05/18 15:24:33 1.9.2.4 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: lists.c,v 1.9.2.2 2012/05/16 07:54:49 misho Exp $ +* $Id: lists.c,v 1.9.2.4 2012/05/18 15:24:33 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -52,11 +52,10 @@ SUCH DAMAGE. * @srv = RPC Server instance * @tag = Function tag * @funcaddr = Function address - * @args = Number of return function arguments * return: -1 error, 0 already registered tag or 1 register ok */ int -rpc_srv_registerCall(rpc_srv_t * __restrict srv, u_short tag, void *funcaddr, u_short args) +rpc_srv_registerCall(rpc_srv_t * __restrict srv, u_short tag, void *funcaddr) { rpc_func_t *func; @@ -81,13 +80,6 @@ rpc_srv_registerCall(rpc_srv_t * __restrict srv, u_sho AIT_KEY(&func->func_name) = tag; AIT_SET_PTR(&func->func_name, funcaddr, 0); - /* allocate return variables */ - if (args > 0 && !(func->func_vars = io_allocVars(args))) { - AIT_FREE_VAL(&func->func_name); - free(func); - return -1; - } - /* add to list of functions */ TAILQ_INSERT_TAIL(&srv->srv_funcs, func, func_node); return 1; @@ -116,7 +108,6 @@ rpc_srv_unregisterCall(rpc_srv_t * __restrict srv, u_s TAILQ_REMOVE(&srv->srv_funcs, f, func_node); - io_freeVars(&f->func_vars); AIT_FREE_VAL(&f->func_name); free(f); return 1; @@ -148,7 +139,6 @@ rpc_srv_getCall(rpc_srv_t * __restrict srv, uint16_t t /* --------------------------------------------------------- */ -#if 0 /* * rpc_srv_getBLOB() - Get registered BLOB * @@ -159,17 +149,16 @@ rpc_srv_getCall(rpc_srv_t * __restrict srv, uint16_t t inline rpc_blob_t * rpc_srv_getBLOB(rpc_srv_t * __restrict srv, uint32_t var) { - rpc_blob_t *b; + rpc_blob_t *b, *tmp; if (!srv) { rpc_SetErr(EINVAL, "Invalid parameter can`t get BLOB variable"); return NULL; } - for (b = srv->srv_blob.blobs; b; b = b->blob_next) { + TAILQ_FOREACH_SAFE(b, &srv->srv_blob.blobs, blob_node, tmp) if (b->blob_var == var) break; - } return b; } @@ -192,11 +181,8 @@ rpc_srv_registerBLOB(rpc_srv_t * __restrict srv, size_ } blob = rpc_srv_blobCreate(srv, len); - if (blob) { - blob->blob_next = srv->srv_blob.blobs; - srv->srv_blob.blobs = blob; - } + TAILQ_INSERT_TAIL(&srv->srv_blob.blobs, blob, blob_node); return blob; } @@ -210,7 +196,7 @@ rpc_srv_registerBLOB(rpc_srv_t * __restrict srv, size_ int rpc_srv_unregisterBLOB(rpc_srv_t * __restrict srv, uint32_t var) { - rpc_blob_t *b, *curr; + rpc_blob_t *b; if (!srv) { rpc_SetErr(EINVAL, "Invalid parameter can`t unregister BLOB variable"); @@ -220,19 +206,10 @@ rpc_srv_unregisterBLOB(rpc_srv_t * __restrict srv, uin b = rpc_srv_getBLOB(srv, var); if (!b) /* not found element for unregister */ return 0; - /* if BLOB is unmapped force to unmap object */ - if (b->blob_data) - rpc_srv_blobUnmap(b); - if (srv->srv_blob.blobs == b) { /* if is 1st element */ - srv->srv_blob.blobs = srv->srv_blob.blobs->blob_next; - } else { - for (curr = srv->srv_blob.blobs; curr->blob_next != b; curr = curr->blob_next); - curr->blob_next = curr->blob_next->blob_next; - } + TAILQ_REMOVE(&srv->srv_blob.blobs, b, blob_node); + rpc_srv_blobFree(srv, b); free(b); - return 1; } -#endif