Diff for /libaitrpc/src/lists.c between versions 1.9.2.3 and 1.11.2.1

version 1.9.2.3, 2012/05/16 08:10:39 version 1.11.2.1, 2012/11/13 09:21:27
Line 52  SUCH DAMAGE. Line 52  SUCH DAMAGE.
  * @srv = RPC Server instance   * @srv = RPC Server instance
  * @tag = Function tag   * @tag = Function tag
  * @funcaddr = Function address   * @funcaddr = Function address
  * @args = Number of return function arguments  
  * return: -1 error, 0 already registered tag or 1 register ok   * return: -1 error, 0 already registered tag or 1 register ok
  */   */
 int  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;          rpc_func_t *func;
   
         if (!srv || !funcaddr) {          if (!srv || !funcaddr) {
                 rpc_SetErr(EINVAL, "Invalid parameter can`t register function");                  rpc_SetErr(EINVAL, "Invalid parameter can`t register function");
                 return -1;                  return -1;
         } else {  
                 /* search for duplicate */  
                 TAILQ_FOREACH(func, &srv->srv_funcs, func_node)  
                         if (AIT_KEY(&func->func_name) == tag)  
                                 return 0;  
         }          }
   
        if (!(func = malloc(sizeof(rpc_func_t)))) {        if (!(func = io_malloc(sizeof(rpc_func_t)))) {
                 LOGERR;                  LOGERR;
                 return -1;                  return -1;
         } else {          } else {
                 memset(func, 0, sizeof(rpc_func_t));                  memset(func, 0, sizeof(rpc_func_t));
                func->func_parent = srv;                AIT_KEY(&func->func_name) = tag;
         }          }
   
        AIT_KEY(&func->func_name) = tag;        /* search for duplicate */
        AIT_SET_PTR(&func->func_name, funcaddr, 0);        if (AVL_FIND(tagRPCFuncs, &srv->srv_funcs, func)) {
                io_free(func);
        /* allocate return variables */                return 0;
        if (args > 0 && !(func->func_vars = io_allocVars(args))) { 
                AIT_FREE_VAL(&func->func_name); 
                free(func); 
                return -1; 
         }          }
   
           func->func_parent = srv;
           AIT_SET_PTR(&func->func_name, funcaddr, 0);
   
         /* add to list of functions */          /* add to list of functions */
        TAILQ_INSERT_TAIL(&srv->srv_funcs, func, func_node);        RPC_FUNCS_LOCK(&srv->srv_funcs);
         SLIST_INSERT_HEAD(&srv->srv_funcs, func, func_next);
         AVL_INSERT(tagRPCFuncs, &srv->srv_funcs, func);
         RPC_FUNCS_UNLOCK(&srv->srv_funcs);
         return 1;          return 1;
 }  }
   
Line 114  rpc_srv_unregisterCall(rpc_srv_t * __restrict srv, u_s Line 110  rpc_srv_unregisterCall(rpc_srv_t * __restrict srv, u_s
         if (!f)                 /* not found element for unregister */          if (!f)                 /* not found element for unregister */
                 return 0;                  return 0;
   
        TAILQ_REMOVE(&srv->srv_funcs, f, func_node);        RPC_FUNCS_LOCK(&srv->srv_funcs);
         AVL_REMOVE(tagRPCFuncs, &srv->srv_funcs, f);
         SLIST_REMOVE(&srv->srv_funcs, f, tagRPCFunc, func_next);
         RPC_FUNCS_UNLOCK(&srv->srv_funcs);
   
         io_freeVars(&f->func_vars);  
         AIT_FREE_VAL(&f->func_name);          AIT_FREE_VAL(&f->func_name);
        free(f);        io_free(f);
         return 1;          return 1;
 }  }
   
Line 132  rpc_srv_unregisterCall(rpc_srv_t * __restrict srv, u_s Line 130  rpc_srv_unregisterCall(rpc_srv_t * __restrict srv, u_s
 inline rpc_func_t *  inline rpc_func_t *
 rpc_srv_getCall(rpc_srv_t * __restrict srv, uint16_t tag)  rpc_srv_getCall(rpc_srv_t * __restrict srv, uint16_t tag)
 {  {
        rpc_func_t *f, *tmp;        rpc_func_t tmp;
   
         if (!srv) {          if (!srv) {
                 rpc_SetErr(EINVAL, "Invalid parameter can`t get function");                  rpc_SetErr(EINVAL, "Invalid parameter can`t get function");
                 return NULL;                  return NULL;
        }        } else
                 memset(&tmp, 0, sizeof tmp);
   
        TAILQ_FOREACH_SAFE(f, &srv->srv_funcs, func_node, tmp)        AIT_KEY(&tmp.func_name) = tag;
                if (AIT_KEY(&f->func_name) == tag)        return AVL_FIND(tagRPCFuncs, &srv->srv_funcs, &tmp);
                        break; 
 
        return f; 
 }  }
   
 /* --------------------------------------------------------- */  /* --------------------------------------------------------- */
Line 219  rpc_srv_unregisterBLOB(rpc_srv_t * __restrict srv, uin Line 215  rpc_srv_unregisterBLOB(rpc_srv_t * __restrict srv, uin
         TAILQ_REMOVE(&srv->srv_blob.blobs, b, blob_node);          TAILQ_REMOVE(&srv->srv_blob.blobs, b, blob_node);
   
         rpc_srv_blobFree(srv, b);          rpc_srv_blobFree(srv, b);
        free(b);        io_free(b);
         return 1;          return 1;
 }  }

Removed from v.1.9.2.3  
changed lines
  Added in v.1.11.2.1


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>