|
|
| version 1.4.4.4, 2012/03/27 23:06:37 | version 1.5.2.3, 2012/03/29 13:16:24 |
|---|---|
| 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 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 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 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 569 io_freeVar(ait_val_t * __restrict val) | Line 569 io_freeVar(ait_val_t * __restrict 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; | |
| } | } |