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

version 1.9.2.3, 2012/05/16 08:10:39 version 1.12.6.1, 2013/01/17 16:33:57
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
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 = e_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)) {
                e_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);        e_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);        e_free(b);
         return 1;          return 1;
 }  }

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


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