Diff for /libelwix/src/vars.c between versions 1.2.2.1 and 1.6

version 1.2.2.1, 2013/03/07 23:04:15 version 1.6, 2013/11/14 21:31:28
Line 46  SUCH DAMAGE. Line 46  SUCH DAMAGE.
 #include "global.h"  #include "global.h"
   
   
static intstatic inline int
 vars2buffer(u_char * __restrict buf, int buflen, int be, array_t * __restrict vars)  vars2buffer(u_char * __restrict buf, int buflen, int be, array_t * __restrict vars)
 {  {
         int Limit = 0;          int Limit = 0;
Line 123  vars2buffer(u_char * __restrict buf, int buflen, int b Line 123  vars2buffer(u_char * __restrict buf, int buflen, int b
                                 break;                                  break;
                         case buffer:                          case buffer:
                         case string:                          case string:
                           case ptr:
                                 if (AIT_LEN(val) > buflen - Limit) {                                  if (AIT_LEN(val) > buflen - Limit) {
                                         elwix_SetErr(EMSGSIZE, "Short buffer buflen=%d "                                          elwix_SetErr(EMSGSIZE, "Short buffer buflen=%d "
                                                         "needed min %d", buflen, Limit + AIT_LEN(val));                                                          "needed min %d", buflen, Limit + AIT_LEN(val));
Line 145  vars2buffer(u_char * __restrict buf, int buflen, int b Line 146  vars2buffer(u_char * __restrict buf, int buflen, int b
         return Limit;          return Limit;
 }  }
   
static array_t *static inline array_t *
 buffer2vars(u_char * __restrict buf, int buflen, int vnum, int zcpy)  buffer2vars(u_char * __restrict buf, int buflen, int vnum, int zcpy)
 {  {
         array_t *vars;          array_t *vars;
Line 218  buffer2vars(u_char * __restrict buf, int buflen, int v Line 219  buffer2vars(u_char * __restrict buf, int buflen, int v
                                         val->val.net = le64toh(v[i].val.net);                                          val->val.net = le64toh(v[i].val.net);
                                 break;                                  break;
                         case data:                          case data:
                                /* WARNING:: remap data type to buffer */                        case ptr:
                                 /* WARNING:: remap data and ptr type to buffer! */
                                 val->val_type = buffer;                                  val->val_type = buffer;
                         case buffer:                          case buffer:
                         case string:                          case string:
Line 258  buffer2vars(u_char * __restrict buf, int buflen, int v Line 260  buffer2vars(u_char * __restrict buf, int buflen, int v
  * @vars = Variable array   * @vars = Variable array
  * return: -1 error, 0 nothing done or >0 size of marshaled data   * return: -1 error, 0 nothing done or >0 size of marshaled data
  */   */
inline intint
 ait_vars2buffer(u_char * __restrict buf, int buflen, array_t * __restrict vars)  ait_vars2buffer(u_char * __restrict buf, int buflen, array_t * __restrict vars)
 {  {
         return vars2buffer(buf, buflen, 42, vars);          return vars2buffer(buf, buflen, 42, vars);
Line 274  ait_vars2buffer(u_char * __restrict buf, int buflen, a Line 276  ait_vars2buffer(u_char * __restrict buf, int buflen, a
                 *DON'T MODIFY OR DESTROY BUFFER*. =0 call array_Free() before array_Destroy()                  *DON'T MODIFY OR DESTROY BUFFER*. =0 call array_Free() before array_Destroy()
  * return: =NULL error, !=NULL allocated variable array, after use must free with array_Destroy()   * return: =NULL error, !=NULL allocated variable array, after use must free with array_Destroy()
  */   */
inline array_t *array_t *
 ait_buffer2vars(u_char * __restrict buf, int buflen, int vnum, int zcpy)  ait_buffer2vars(u_char * __restrict buf, int buflen, int vnum, int zcpy)
 {  {
         return buffer2vars(buf, buflen, vnum, zcpy);          return buffer2vars(buf, buflen, vnum, zcpy);
Line 290  ait_buffer2vars(u_char * __restrict buf, int buflen, i Line 292  ait_buffer2vars(u_char * __restrict buf, int buflen, i
  * @vars = Variable array   * @vars = Variable array
  * return: -1 error, 0 nothing done or >0 size of marshaled data   * return: -1 error, 0 nothing done or >0 size of marshaled data
  */   */
inline intint
 ait_vars2map(u_char *buf, int buflen, array_t *vars)  ait_vars2map(u_char *buf, int buflen, array_t *vars)
 {  {
         return vars2buffer(buf, buflen, 0, vars);          return vars2buffer(buf, buflen, 0, vars);
Line 306  ait_vars2map(u_char *buf, int buflen, array_t *vars) Line 308  ait_vars2map(u_char *buf, int buflen, array_t *vars)
                 *DON'T MODIFY OR DESTROY BUFFER*. =0 call array_Free() before array_Destroy()                  *DON'T MODIFY OR DESTROY BUFFER*. =0 call array_Free() before array_Destroy()
  * return: =NULL error, !=NULL allocated variable array, after use must free with array_Destroy()   * return: =NULL error, !=NULL allocated variable array, after use must free with array_Destroy()
  */   */
inline array_t *array_t *
 ait_map2vars(u_char *buf, int buflen, int vnum, int zcpy)  ait_map2vars(u_char *buf, int buflen, int vnum, int zcpy)
 {  {
         return buffer2vars(buf, buflen, vnum, zcpy);          return buffer2vars(buf, buflen, vnum, zcpy);
Line 321  ait_map2vars(u_char *buf, int buflen, int vnum, int zc Line 323  ait_map2vars(u_char *buf, int buflen, int vnum, int zc
  * @varnum = Number of variables   * @varnum = Number of variables
  * return: =NULL error or !=NULL allocated array   * return: =NULL error or !=NULL allocated array
  */   */
inline array_t *array_t *
 ait_allocVars(int varnum)  ait_allocVars(int varnum)
 {  {
         array_t *arr;          array_t *arr;
Line 349  ait_allocVars(int varnum) Line 351  ait_allocVars(int varnum)
  * @n = index of variable into array   * @n = index of variable into array
  * return: NULL error or !=NULL ait_val_t element   * return: NULL error or !=NULL ait_val_t element
  */   */
inline ait_val_t *ait_val_t *
 ait_getVars(array_t ** __restrict vars, int n)  ait_getVars(array_t ** __restrict vars, int n)
 {  {
         register int i;          register int i;
Line 382  ait_getVars(array_t ** __restrict vars, int n) Line 384  ait_getVars(array_t ** __restrict vars, int n)
  * @vars = Variable array   * @vars = Variable array
  * return: -1 error or size of array   * return: -1 error or size of array
  */   */
inline intint
 ait_clrVars(array_t * __restrict vars)  ait_clrVars(array_t * __restrict vars)
 {  {
         register int i;          register int i;
Line 404  ait_clrVars(array_t * __restrict vars) Line 406  ait_clrVars(array_t * __restrict vars)
  * @vars = Variable array   * @vars = Variable array
  * return: none   * return: none
  */   */
inline voidvoid
 ait_freeVars(array_t ** __restrict vars)  ait_freeVars(array_t ** __restrict vars)
 {  {
           register int i;
           ait_val_t *v;
   
         if (!vars || !*vars)          if (!vars || !*vars)
                 return;                  return;
   
        ait_clrVars(*vars);        for (i = 0; i < array_Size(*vars); i++)
        array_Free(*vars);                if ((v = array(*vars, i, ait_val_t*))) {
                         /* free memory if isn't zero copy */
                         if (!AIT_IN(v)) {
                                 AIT_FREE_VAL(v);
                                 if ((*vars)->arr_data[i])
                                         e_free((*vars)->arr_data[i]);
                         } else
                                 AIT_FREE_VAL(v);
                         (*vars)->arr_data[i] = NULL;
                 }
         (*vars)->arr_last = -1;
 
         array_Destroy(vars);          array_Destroy(vars);
 }  }
   
   /*
    * ait_resideVars() - Calculate footprint of resided variables into array
    *
    * @vars = Variable array
    * return: bytes for whole array
    */
   size_t
   ait_resideVars(array_t * __restrict vars)
   {
           size_t ret = 0;
           register int i;
   
           if (vars) {
                   ret = array_Size(vars) * sizeof(ait_val_t);
                   for (i = 0; i < array_Size(vars); i++)
                           switch (AIT_TYPE(array(vars, i, ait_val_t*))) {
                                   case buffer:
                                   case string:
                                   case data:
                                   case ptr:
                                           ret += AIT_LEN(array(vars, i, ait_val_t*));
                                           break;
                                   default:
                                           break;
                           }
           }
   
           return ret;
   }
   
   
 /*  /*
  * ait_allocVar() - Allocate memory for variable   * ait_allocVar() - Allocate memory for variable
  *   *
  * return: NULL error or new variable, after use free variable with ait_freeVar()   * return: NULL error or new variable, after use free variable with ait_freeVar()
  */   */
inline ait_val_t *ait_val_t *
 ait_allocVar(void)  ait_allocVar(void)
 {  {
         ait_val_t *v = NULL;          ait_val_t *v = NULL;
Line 442  ait_allocVar(void) Line 488  ait_allocVar(void)
  * @val = Variable   * @val = Variable
  * return: none   * return: none
  */   */
inline voidvoid
 ait_freeVar(ait_val_t ** __restrict val)  ait_freeVar(ait_val_t ** __restrict val)
 {  {
         if (val && *val) {          if (val && *val) {
Line 570  _cmp_arr_val_desc(const void *a, const void *b) Line 616  _cmp_arr_val_desc(const void *a, const void *b)
  * @cmp = Custom compare function for sorting. If =NULL compare by value   * @cmp = Custom compare function for sorting. If =NULL compare by value
  * return: none   * return: none
  */   */
inline voidvoid
 ait_sortVarsByVal(array_t * __restrict vars, int order,  int (*cmp)(const void*, const void*))  ait_sortVarsByVal(array_t * __restrict vars, int order,  int (*cmp)(const void*, const void*))
 {  {
         if (!vars)          if (!vars)
Line 591  ait_sortVarsByVal(array_t * __restrict vars, int order Line 637  ait_sortVarsByVal(array_t * __restrict vars, int order
  * @order = Sort order. If =0 ascend or !=0 descend   * @order = Sort order. If =0 ascend or !=0 descend
  * return: none   * return: none
  */   */
inline voidvoid
 ait_sortVarsByKey(array_t * __restrict vars, int order)  ait_sortVarsByKey(array_t * __restrict vars, int order)
 {  {
         if (!vars)          if (!vars)
Line 702  ait_hashVar(ait_val_t * __restrict v, const char * __r Line 748  ait_hashVar(ait_val_t * __restrict v, const char * __r
  * @vars = Variables   * @vars = Variables
  * return -1 error or 0 ok   * return -1 error or 0 ok
  */   */
inline intint
 ait_hashKeyVars(array_t * __restrict vars)  ait_hashKeyVars(array_t * __restrict vars)
 {  {
         register int i;          register int i;
Line 723  ait_hashKeyVars(array_t * __restrict vars) Line 769  ait_hashKeyVars(array_t * __restrict vars)
  * @key = Search string   * @key = Search string
  * return: NULL error or not found, !=NULL valid element   * return: NULL error or not found, !=NULL valid element
  */   */
inline ait_val_t *ait_val_t *
 ait_findKeyHash(array_t * __restrict vars, const char * __restrict key)  ait_findKeyHash(array_t * __restrict vars, const char * __restrict key)
 {  {
         u_short k = 0;          u_short k = 0;
Line 777  ait_sprintfVar(ait_val_t * __restrict v, const char *f Line 823  ait_sprintfVar(ait_val_t * __restrict v, const char *f
  * @... = data   * @... = data
  * return: -1 error or 0 ok   * return: -1 error or 0 ok
  */   */
inline intint
 ait_setlikeVar(ait_val_t * __restrict v, ait_type_t t, u_int l, ...)  ait_setlikeVar(ait_val_t * __restrict v, ait_type_t t, u_int l, ...)
 {  {
         va_list lst;          va_list lst;
Line 812  ait_setlikeVar(ait_val_t * __restrict v, ait_type_t t, Line 858  ait_setlikeVar(ait_val_t * __restrict v, ait_type_t t,
  * @v = variable   * @v = variable
  * return: return raw data   * return: return raw data
  */   */
inline uint64_tuint64_t
 ait_getlikeVar(ait_val_t * __restrict v)  ait_getlikeVar(ait_val_t * __restrict v)
 {  {
         if (!v)          if (!v)
Line 828  ait_getlikeVar(ait_val_t * __restrict v) Line 874  ait_getlikeVar(ait_val_t * __restrict v)
  * @b = 2nd variable   * @b = 2nd variable
  * return: 0 is equal or !=0 is different   * return: 0 is equal or !=0 is different
  */   */
inline intint
 ait_cmpVar(ait_val_t * __restrict a, ait_val_t * __restrict b)  ait_cmpVar(ait_val_t * __restrict a, ait_val_t * __restrict b)
 {  {
         intptr_t ret;          intptr_t ret;

Removed from v.1.2.2.1  
changed lines
  Added in v.1.6


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