Diff for /libelwix/src/vars.c between versions 1.1 and 1.3

version 1.1, 2013/01/17 10:05:35 version 1.3, 2013/03/07 23:04:48
Line 222  buffer2vars(u_char * __restrict buf, int buflen, int v Line 222  buffer2vars(u_char * __restrict buf, int buflen, int v
                                 val->val_type = buffer;                                  val->val_type = buffer;
                         case buffer:                          case buffer:
                         case string:                          case string:
                                 if (AIT_LEN(val) > buflen - Limit) {  
                                         elwix_SetErr(EMSGSIZE, "Short buffer buflen=%d "  
                                                         "needed min %d", buflen, Limit + AIT_LEN(val));  
                                         if (!zcpy)  
                                                 array_Free(vars);  
                                         array_Destroy(&vars);  
                                         return NULL;  
                                 } else  
                                         Limit += AIT_LEN(val);  
   
                                 if (!zcpy) {                                  if (!zcpy) {
                                         val->val.buffer = e_malloc(AIT_LEN(val));                                          val->val.buffer = e_malloc(AIT_LEN(val));
                                         if (!val->val.buffer) {                                          if (!val->val.buffer) {
Line 587  ait_sortVarsByVal(array_t * __restrict vars, int order Line 577  ait_sortVarsByVal(array_t * __restrict vars, int order
                 return;                  return;
   
         if (cmp)          if (cmp)
                qsort(vars->arr_data, vars->arr_num, sizeof(void*), cmp);                qsort(vars->arr_data, vars->arr_num, sizeof(uintptr_t), cmp);
         else if (order)          else if (order)
                qsort(vars->arr_data, vars->arr_num, sizeof(void*), _cmp_arr_val_desc);                qsort(vars->arr_data, vars->arr_num, sizeof(uintptr_t), _cmp_arr_val_desc);
         else          else
                qsort(vars->arr_data, vars->arr_num, sizeof(void*), _cmp_arr_val_asc);                qsort(vars->arr_data, vars->arr_num, sizeof(uintptr_t), _cmp_arr_val_asc);
 }  }
   
 /*  /*
Line 608  ait_sortVarsByKey(array_t * __restrict vars, int order Line 598  ait_sortVarsByKey(array_t * __restrict vars, int order
                 return;                  return;
   
         if (order)          if (order)
                qsort(vars->arr_data, vars->arr_num, sizeof(void*), _cmp_arr_key_desc);                qsort(vars->arr_data, vars->arr_num, sizeof(uintptr_t), _cmp_arr_key_desc);
         else          else
                qsort(vars->arr_data, vars->arr_num, sizeof(void*), _cmp_arr_key_asc);                qsort(vars->arr_data, vars->arr_num, sizeof(uintptr_t), _cmp_arr_key_asc);
 }  }
   
 /*  /*
Line 634  ait_findKeyVars(array_t * __restrict vars, u_short key Line 624  ait_findKeyVars(array_t * __restrict vars, u_short key
         if (array_Copy(&tmp, vars) == -1)          if (array_Copy(&tmp, vars) == -1)
                 return NULL;                  return NULL;
         else          else
                qsort(tmp->arr_data, tmp->arr_num, sizeof(void*), _cmp_arr_key_asc);                qsort(tmp->arr_data, tmp->arr_num, sizeof(uintptr_t), _cmp_arr_key_asc);
   
         /* binary search */          /* binary search */
         for (p = (const u_char*) tmp->arr_data, i = array_Size(tmp); i; i >>= 1) {          for (p = (const u_char*) tmp->arr_data, i = array_Size(tmp); i; i >>= 1) {
                vv = (ait_val_t**) (p + (i >> 1) * sizeof(void*));                vv = (ait_val_t**) (p + (i >> 1) * sizeof(uintptr_t));
                 if (!(key - AIT_KEY(*vv))) {    /* found! */                  if (!(key - AIT_KEY(*vv))) {    /* found! */
                         v = *vv;                          v = *vv;
                         break;                          break;
                 }                  }
                 if ((key - AIT_KEY(*vv)) > 0) { /* move right key > current */                  if ((key - AIT_KEY(*vv)) > 0) { /* move right key > current */
                        p = (const u_char*) vv + sizeof(void*);                        p = (const u_char*) vv + sizeof(uintptr_t);
                         i--;                          i--;
                 }                               /* else move left */                  }                               /* else move left */
         }          }
Line 754  ait_findKeyHash(array_t * __restrict vars, const char  Line 744  ait_findKeyHash(array_t * __restrict vars, const char 
  * return: -1 error or >0 copied bytes to variable   * return: -1 error or >0 copied bytes to variable
  */   */
 int  int
io_sprintfVar(ait_val_t * __restrict v, const char *fmt, ...)ait_sprintfVar(ait_val_t * __restrict v, const char *fmt, ...)
 {  {
         int ret = 0;          int ret = 0;
         va_list lst;          va_list lst;

Removed from v.1.1  
changed lines
  Added in v.1.3


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