Diff for /libaitio/src/Attic/vars.c between versions 1.5 and 1.8

version 1.5, 2012/03/29 01:31:34 version 1.8, 2012/05/19 00:00:12
Line 47  SUCH DAMAGE. Line 47  SUCH DAMAGE.
   
   
 /*  /*
 * io_vars2buffer() Marshaling data from array with variables to buffer * io_vars2buffer() - Marshaling data from array with variables to buffer
  *   *
  * @buf = Buffer   * @buf = Buffer
  * @buflen = Size of buffer   * @buflen = Size of buffer
Line 71  io_vars2buffer(u_char *buf, int buflen, array_t *vars) Line 71  io_vars2buffer(u_char *buf, int buflen, array_t *vars)
   
         Limit = sizeof(ait_val_t) * io_arraySize(vars);          Limit = sizeof(ait_val_t) * io_arraySize(vars);
         if (Limit > buflen) {          if (Limit > buflen) {
                io_SetErr(EMSGSIZE, "Error:: too short buffer buflen=%d needed min %d ...\n",                 io_SetErr(EMSGSIZE, "Short buffer buflen=%d needed min %d", 
                                 buflen, Limit);                                  buflen, Limit);
                 return -1;                  return -1;
         } else {          } else {
Line 86  io_vars2buffer(u_char *buf, int buflen, array_t *vars) Line 86  io_vars2buffer(u_char *buf, int buflen, array_t *vars)
                 val = io_array(vars, i, ait_val_t*);                  val = io_array(vars, i, ait_val_t*);
   
                 v[i].val_type = val->val_type;                  v[i].val_type = val->val_type;
                AIT_HASH(&v[i]) = htobe16(AIT_HASH(val));                AIT_KEY(&v[i]) = htobe16(AIT_KEY(val));
                 AIT_LEN(&v[i]) = htobe32(AIT_LEN(val));                  AIT_LEN(&v[i]) = htobe32(AIT_LEN(val));
   
                 switch (AIT_TYPE(val)) {                  switch (AIT_TYPE(val)) {
Line 105  io_vars2buffer(u_char *buf, int buflen, array_t *vars) Line 105  io_vars2buffer(u_char *buf, int buflen, array_t *vars)
                                 break;                                  break;
                         case data:                          case data:
                                 if (AIT_LEN(val) > buflen - Limit) {                                  if (AIT_LEN(val) > buflen - Limit) {
                                        io_SetErr(EMSGSIZE, "Error:: too short buffer buflen=%d "                                        io_SetErr(EMSGSIZE, "Short buffer buflen=%d "
                                                        "needed min %d ...\n", buflen, Limit + AIT_LEN(val));                                                        "needed min %d", buflen, Limit + AIT_LEN(val));
                                         return -1;                                          return -1;
                                 } else                                  } else
                                         Limit += AIT_LEN(val);                                          Limit += AIT_LEN(val);
Line 119  io_vars2buffer(u_char *buf, int buflen, array_t *vars) Line 119  io_vars2buffer(u_char *buf, int buflen, array_t *vars)
                         case buffer:                          case buffer:
                         case string:                          case string:
                                 if (AIT_LEN(val) > buflen - Limit) {                                  if (AIT_LEN(val) > buflen - Limit) {
                                        io_SetErr(EMSGSIZE, "Error:: too short buffer buflen=%d "                                        io_SetErr(EMSGSIZE, "Short buffer buflen=%d "
                                                        "needed min %d ...\n", buflen, Limit + AIT_LEN(val));                                                        "needed min %d", buflen, Limit + AIT_LEN(val));
                                         return -1;                                          return -1;
                                 } else                                  } else
                                         Limit += AIT_LEN(val);                                          Limit += AIT_LEN(val);
Line 131  io_vars2buffer(u_char *buf, int buflen, array_t *vars) Line 131  io_vars2buffer(u_char *buf, int buflen, array_t *vars)
                                 dat += AIT_LEN(val);                                  dat += AIT_LEN(val);
                                 break;                                  break;
                         default:                          default:
                                io_SetErr(EINVAL, "Error:: unsupported variable type=%d at element #%d ...\n",                                 io_SetErr(EINVAL, "Unsupported variable type=%d at element #%d", 
                                                 AIT_TYPE(val), i);                                                  AIT_TYPE(val), i);
                                 return -1;                                  return -1;
                 }                  }
Line 141  io_vars2buffer(u_char *buf, int buflen, array_t *vars) Line 141  io_vars2buffer(u_char *buf, int buflen, array_t *vars)
 }  }
   
 /*  /*
 * io_buffer2vars() De-marshaling data from buffer to array with variables * io_buffer2vars() - De-marshaling data from buffer to array with variables
  *   *
  * @buf = Buffer   * @buf = Buffer
  * @buflen = Size of buffer   * @buflen = Size of buffer
Line 165  io_buffer2vars(u_char *buf, int buflen, int vnum, int  Line 165  io_buffer2vars(u_char *buf, int buflen, int vnum, int 
   
         Limit = sizeof(ait_val_t) * vnum;          Limit = sizeof(ait_val_t) * vnum;
         if (Limit > buflen) {          if (Limit > buflen) {
                io_SetErr(EMSGSIZE, "Error:: too short buffer buflen=%d needed min %d ...\n",                 io_SetErr(EMSGSIZE, "Short buffer buflen=%d needed min %d", 
                                 buflen, Limit);                                  buflen, Limit);
                 return NULL;                  return NULL;
         } else {          } else {
Line 193  io_buffer2vars(u_char *buf, int buflen, int vnum, int  Line 193  io_buffer2vars(u_char *buf, int buflen, int vnum, int 
                 val->val_type = v[i].val_type;                  val->val_type = v[i].val_type;
 #if defined(__OpenBSD__)  #if defined(__OpenBSD__)
                 AIT_LEN(val) = betoh32(AIT_LEN(&v[i]));                  AIT_LEN(val) = betoh32(AIT_LEN(&v[i]));
                AIT_HASH(val) = betoh16(AIT_HASH(&v[i]));                AIT_KEY(val) = betoh16(AIT_KEY(&v[i]));
 #else  #else
                 AIT_LEN(val) = be32toh(AIT_LEN(&v[i]));                  AIT_LEN(val) = be32toh(AIT_LEN(&v[i]));
                AIT_HASH(val) = be16toh(AIT_HASH(&v[i]));                AIT_KEY(val) = be16toh(AIT_KEY(&v[i]));
 #endif  #endif
   
                 switch (AIT_TYPE(val)) {                  switch (AIT_TYPE(val)) {
Line 223  io_buffer2vars(u_char *buf, int buflen, int vnum, int  Line 223  io_buffer2vars(u_char *buf, int buflen, int vnum, int 
                         case buffer:                          case buffer:
                         case string:                          case string:
                                 if (AIT_LEN(val) > buflen - Limit) {                                  if (AIT_LEN(val) > buflen - Limit) {
                                        io_SetErr(EMSGSIZE, "Error:: too short buffer buflen=%d "                                        io_SetErr(EMSGSIZE, "Short buffer buflen=%d "
                                                        "needed min %d ...\n", buflen, Limit + AIT_LEN(val));                                                        "needed min %d", buflen, Limit + AIT_LEN(val));
                                         if (!zcpy)                                          if (!zcpy)
                                                 io_arrayFree(vars);                                                  io_arrayFree(vars);
                                         io_arrayDestroy(&vars);                                          io_arrayDestroy(&vars);
Line 246  io_buffer2vars(u_char *buf, int buflen, int vnum, int  Line 246  io_buffer2vars(u_char *buf, int buflen, int vnum, int 
                                 dat += AIT_LEN(val);                                  dat += AIT_LEN(val);
                                 break;                                  break;
                         default:                          default:
                                io_SetErr(EINVAL, "Error:: unsupported variable type=%d at element #%d ...\n",                                 io_SetErr(EINVAL, "Unsupported variable type=%d at element #%d", 
                                                 AIT_TYPE(val), i);                                                  AIT_TYPE(val), i);
                                 if (!zcpy)                                  if (!zcpy)
                                         io_arrayFree(vars);                                          io_arrayFree(vars);
Line 261  io_buffer2vars(u_char *buf, int buflen, int vnum, int  Line 261  io_buffer2vars(u_char *buf, int buflen, int vnum, int 
 /* buffer marshaling without swapping bytes to network order */  /* buffer marshaling without swapping bytes to network order */
   
 /*  /*
 * io_vars2map() Marshaling data from array with variables to memory map * io_vars2map() - Marshaling data from array with variables to memory map
  *   *
  * @buf = Buffer   * @buf = Buffer
  * @buflen = Size of buffer   * @buflen = Size of buffer
Line 285  io_vars2map(u_char *buf, int buflen, array_t *vars) Line 285  io_vars2map(u_char *buf, int buflen, array_t *vars)
   
         Limit = sizeof(ait_val_t) * io_arraySize(vars);          Limit = sizeof(ait_val_t) * io_arraySize(vars);
         if (Limit > buflen) {          if (Limit > buflen) {
                io_SetErr(EMSGSIZE, "Error:: too short buffer buflen=%d needed min %d ...\n",                 io_SetErr(EMSGSIZE, "Short buffer buflen=%d needed min %d", 
                                 buflen, Limit);                                  buflen, Limit);
                 return -1;                  return -1;
         } else {          } else {
Line 300  io_vars2map(u_char *buf, int buflen, array_t *vars) Line 300  io_vars2map(u_char *buf, int buflen, array_t *vars)
                 val = io_array(vars, i, ait_val_t*);                  val = io_array(vars, i, ait_val_t*);
   
                 v[i].val_type = val->val_type;                  v[i].val_type = val->val_type;
                AIT_HASH(&v[i]) = AIT_HASH(val);                AIT_KEY(&v[i]) = AIT_KEY(val);
                 AIT_LEN(&v[i]) = AIT_LEN(val);                  AIT_LEN(&v[i]) = AIT_LEN(val);
   
                 switch (AIT_TYPE(val)) {                  switch (AIT_TYPE(val)) {
Line 319  io_vars2map(u_char *buf, int buflen, array_t *vars) Line 319  io_vars2map(u_char *buf, int buflen, array_t *vars)
                                 break;                                  break;
                         case data:                          case data:
                                 if (AIT_LEN(val) > buflen - Limit) {                                  if (AIT_LEN(val) > buflen - Limit) {
                                        io_SetErr(EMSGSIZE, "Error:: too short buffer buflen=%d "                                        io_SetErr(EMSGSIZE, "Short buffer buflen=%d "
                                                        "needed min %d ...\n", buflen, Limit + AIT_LEN(val));                                                        "needed min %d", buflen, Limit + AIT_LEN(val));
                                         return -1;                                          return -1;
                                 } else                                  } else
                                         Limit += AIT_LEN(val);                                          Limit += AIT_LEN(val);
Line 333  io_vars2map(u_char *buf, int buflen, array_t *vars) Line 333  io_vars2map(u_char *buf, int buflen, array_t *vars)
                         case buffer:                          case buffer:
                         case string:                          case string:
                                 if (AIT_LEN(val) > buflen - Limit) {                                  if (AIT_LEN(val) > buflen - Limit) {
                                        io_SetErr(EMSGSIZE, "Error:: too short buffer buflen=%d "                                        io_SetErr(EMSGSIZE, "Short buffer buflen=%d "
                                                        "needed min %d ...\n", buflen, Limit + AIT_LEN(val));                                                        "needed min %d", buflen, Limit + AIT_LEN(val));
                                         return -1;                                          return -1;
                                 } else                                  } else
                                         Limit += AIT_LEN(val);                                          Limit += AIT_LEN(val);
Line 345  io_vars2map(u_char *buf, int buflen, array_t *vars) Line 345  io_vars2map(u_char *buf, int buflen, array_t *vars)
                                 dat += AIT_LEN(val);                                  dat += AIT_LEN(val);
                                 break;                                  break;
                         default:                          default:
                                io_SetErr(EINVAL, "Error:: unsupported variable type=%d at element #%d ...\n",                                 io_SetErr(EINVAL, "Unsupported variable type=%d at element #%d", 
                                                 AIT_TYPE(val), i);                                                  AIT_TYPE(val), i);
                                 return -1;                                  return -1;
                 }                  }
Line 355  io_vars2map(u_char *buf, int buflen, array_t *vars) Line 355  io_vars2map(u_char *buf, int buflen, array_t *vars)
 }  }
   
 /*  /*
 * io_map2vars() De-marshaling data from memory map to array with variables * io_map2vars() - De-marshaling data from memory map to array with variables
  *   *
  * @buf = Buffer   * @buf = Buffer
  * @buflen = Size of buffer   * @buflen = Size of buffer
Line 379  io_map2vars(u_char *buf, int buflen, int vnum, int zcp Line 379  io_map2vars(u_char *buf, int buflen, int vnum, int zcp
   
         Limit = sizeof(ait_val_t) * vnum;          Limit = sizeof(ait_val_t) * vnum;
         if (Limit > buflen) {          if (Limit > buflen) {
                io_SetErr(EMSGSIZE, "Error:: too short buffer buflen=%d needed min %d ...\n",                 io_SetErr(EMSGSIZE, "Short buffer buflen=%d needed min %d", 
                                 buflen, Limit);                                  buflen, Limit);
                 return NULL;                  return NULL;
         } else {          } else {
Line 405  io_map2vars(u_char *buf, int buflen, int vnum, int zcp Line 405  io_map2vars(u_char *buf, int buflen, int vnum, int zcp
                 io_arraySet(vars, i, val);                  io_arraySet(vars, i, val);
   
                 val->val_type = v[i].val_type;                  val->val_type = v[i].val_type;
                AIT_HASH(val) = AIT_HASH(&v[i]);                AIT_KEY(val) = AIT_KEY(&v[i]);
                 AIT_LEN(val) = AIT_LEN(&v[i]);                  AIT_LEN(val) = AIT_LEN(&v[i]);
   
                 switch (AIT_TYPE(val)) {                  switch (AIT_TYPE(val)) {
Line 428  io_map2vars(u_char *buf, int buflen, int vnum, int zcp Line 428  io_map2vars(u_char *buf, int buflen, int vnum, int zcp
                         case buffer:                          case buffer:
                         case string:                          case string:
                                 if (AIT_LEN(val) > buflen - Limit) {                                  if (AIT_LEN(val) > buflen - Limit) {
                                        io_SetErr(EMSGSIZE, "Error:: too short buffer buflen=%d "                                        io_SetErr(EMSGSIZE, "short buffer buflen=%d "
                                                        "needed min %d ...\n", buflen, Limit + AIT_LEN(val));                                                        "needed min %d", buflen, Limit + AIT_LEN(val));
                                         if (!zcpy)                                          if (!zcpy)
                                                 io_arrayFree(vars);                                                  io_arrayFree(vars);
                                         io_arrayDestroy(&vars);                                          io_arrayDestroy(&vars);
Line 451  io_map2vars(u_char *buf, int buflen, int vnum, int zcp Line 451  io_map2vars(u_char *buf, int buflen, int vnum, int zcp
                                 dat += AIT_LEN(val);                                  dat += AIT_LEN(val);
                                 break;                                  break;
                         default:                          default:
                                io_SetErr(EINVAL, "Error:: unsupported variable type=%d at element #%d ...\n",                                 io_SetErr(EINVAL, "Unsupported variable type=%d at element #%d", 
                                                 AIT_TYPE(val), i);                                                  AIT_TYPE(val), i);
                                 if (!zcpy)                                  if (!zcpy)
                                         io_arrayFree(vars);                                          io_arrayFree(vars);
Line 465  io_map2vars(u_char *buf, int buflen, int vnum, int zcp Line 465  io_map2vars(u_char *buf, int buflen, int vnum, int zcp
   
   
 /*  /*
 * io_allocVars() Allocate ait_val_t array * io_allocVars() - Allocate ait_val_t array
  *   *
  * @varnum = Number of variables   * @varnum = Number of variables
  * return: =NULL error or !=NULL allocated array   * return: =NULL error or !=NULL allocated array
Line 477  io_allocVars(int varnum) Line 477  io_allocVars(int varnum)
         register int i;          register int i;
         ait_val_t *v;          ait_val_t *v;
   
        if (!varnum || !(arr = io_arrayInit(varnum)))        if (!(arr = io_arrayInit(varnum)))
                 return NULL;                  return NULL;
   
         for (i = 0; i < io_arraySize(arr); i++) {          for (i = 0; i < io_arraySize(arr); i++) {
                v = malloc(sizeof(ait_val_t));                if (!(v = io_allocVar())) {
                if (!v) { 
                        LOGERR; 
                         io_freeVars(&arr);                          io_freeVars(&arr);
                         return NULL;                          return NULL;
                } else {                } else
                        memset(v, 0, sizeof(ait_val_t)); 
                         io_arraySet(arr, i, v);                          io_arraySet(arr, i, v);
                 }  
         }          }
   
         return arr;          return arr;
 }  }
   
 /*  /*
 * io_clrVars() Clear ait_val_t elements from array * io_getVars() - Get ait_val_t element from array and if not exists allocate it
  *   *
  * @vars = Variable array   * @vars = Variable array
    * @n = index of variable into array
    * return: NULL error or !=NULL ait_val_t element
    */
   inline ait_val_t *
   io_getVars(array_t ** __restrict vars, int n)
   {
           register int i;
           ait_val_t *v;
   
           if (!vars)
                   return NULL;
   
           if (!*vars) {
                   if (!(*vars = io_allocVars(n + 1)))
                           return NULL;
           } else {
                   if (n >= (i = io_arraySize(*vars))) {
                           if (io_arrayGrow(*vars, n + 1, 0))
                                   return NULL;
                           for (; i < io_arraySize(*vars); i++)
                                   if (!io_arrayGet(*vars, i)) {
                                           if (!(v = io_allocVar()))
                                                   return NULL;
                                           else
                                                   io_arraySet(*vars, n, v);
                                   }
                   }
           }
   
           return io_array(*vars, n, ait_val_t*);
   }
   
   /*
    * io_clrVars() - Clear ait_val_t elements from array
    *
    * @vars = Variable array
  * return: -1 error or size of array   * return: -1 error or size of array
  */   */
 inline int  inline int
Line 518  io_clrVars(array_t * __restrict vars) Line 550  io_clrVars(array_t * __restrict vars)
 }  }
   
 /*  /*
 * io_freeVars() Free ait_val_t array * io_freeVars() - Free ait_val_t array
  *   *
  * @vars = Variable array   * @vars = Variable array
  * return: none   * return: none
Line 535  io_freeVars(array_t ** __restrict vars) Line 567  io_freeVars(array_t ** __restrict vars)
 }  }
   
 /*  /*
 * io_allocVar() Allocate memory for variable * io_allocVar() - Allocate memory for variable
  *   *
  * return: NULL error or new variable, after use free variable with io_freeVar()   * return: NULL error or new variable, after use free variable with io_freeVar()
  */   */
Line 556  io_allocVar(void) Line 588  io_allocVar(void)
 }  }
   
 /*  /*
 * io_freeVar() Free allocated memory for variable * io_freeVar() - Free allocated memory for variable
  *   *
  * @val = Variable   * @val = Variable
  * return: none   * return: none
  */   */
 inline void  inline void
io_freeVar(ait_val_t * __restrict val)io_freeVar(ait_val_t ** __restrict val)
 {  {
        if (val) {        if (val && *val) {
                AIT_FREE_VAL(val);                AIT_FREE_VAL(*val);
                free(val);                free(*val);
                val = NULL;                *val = NULL;
         }          }
   }
   
   static int
   _cmp_arr_key_asc(const void *a, const void *b)
   {
           return AIT_KEY(*(ait_val_t**) a) - AIT_KEY(*(ait_val_t**) b);
   }
   
   static int
   _cmp_arr_key_desc(const void *a, const void *b)
   {
           return AIT_KEY(*(ait_val_t**) b) - AIT_KEY(*(ait_val_t**) a);
   }
   
   /*
    * io_sortVars() - Sorting array with variables
    *
    * @vars = Variable array
    * @order = Sort order. If =0 ascend or !=0 descend
    * @cmp = Compare function for sorting. If =NULL compare by key
    * return: none
    */
   inline void
   io_sortVars(array_t * __restrict vars, int order,  int (*cmp)(const void*, const void*))
   {
           if (!vars)
                   return;
   
           if (cmp)
                   qsort(vars->arr_data, vars->arr_num, sizeof(void*), cmp);
           else if (order)
                   qsort(vars->arr_data, vars->arr_num, sizeof(void*), _cmp_arr_key_desc);
           else
                   qsort(vars->arr_data, vars->arr_num, sizeof(void*), _cmp_arr_key_asc);
   }
   
   /*
    * io_findKeyVars() - Find variable by key from array
    *
    * @vars = Variables
    * @key = Search key
    * return: NULL error or not found, !=NULL valid element
    */
   ait_val_t *
   io_findKeyVars(array_t * __restrict vars, u_short key)
   {
           array_t *tmp;
           ait_val_t **vv, *v = NULL;
           register int i;
           const u_char *p;
   
           if (!vars)
                   return NULL;
   
           if (io_arrayCopy(&tmp, vars) == -1)
                   return NULL;
           else
                   qsort(tmp->arr_data, tmp->arr_num, sizeof(void*), _cmp_arr_key_asc);
   
           /* binary search */
           for (p = (const u_char*) tmp->arr_data, i = io_arraySize(tmp); i; i >>= 1) {
                   vv = (ait_val_t**) (p + (i >> 1) * sizeof(void*));
                   if (!(key - AIT_KEY(*vv))) {    /* found! */
                           v = *vv;
                           break;
                   }
                   if ((key - AIT_KEY(*vv)) > 0) { /* move right key > current */
                           p = (const u_char*) vv + sizeof(void*);
                           i--;
                   }                               /* else move left */
           }
   
           io_arrayDestroy(&tmp);
           return v;
 }  }

Removed from v.1.5  
changed lines
  Added in v.1.8


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