--- libelwix/src/vars.c 2013/01/17 10:05:35 1.1.1.1 +++ libelwix/src/vars.c 2013/05/30 09:07:34 1.4 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: vars.c,v 1.1.1.1 2013/01/17 10:05:35 misho Exp $ +* $Id: vars.c,v 1.4 2013/05/30 09:07:34 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -46,7 +46,7 @@ SUCH DAMAGE. #include "global.h" -static int +static inline int vars2buffer(u_char * __restrict buf, int buflen, int be, array_t * __restrict vars) { int Limit = 0; @@ -145,7 +145,7 @@ vars2buffer(u_char * __restrict buf, int buflen, int b return Limit; } -static array_t * +static inline array_t * buffer2vars(u_char * __restrict buf, int buflen, int vnum, int zcpy) { array_t *vars; @@ -222,16 +222,6 @@ buffer2vars(u_char * __restrict buf, int buflen, int v val->val_type = buffer; case buffer: 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) { val->val.buffer = e_malloc(AIT_LEN(val)); if (!val->val.buffer) { @@ -268,7 +258,7 @@ buffer2vars(u_char * __restrict buf, int buflen, int v * @vars = Variable array * return: -1 error, 0 nothing done or >0 size of marshaled data */ -inline int +int ait_vars2buffer(u_char * __restrict buf, int buflen, array_t * __restrict vars) { return vars2buffer(buf, buflen, 42, vars); @@ -284,7 +274,7 @@ ait_vars2buffer(u_char * __restrict buf, int buflen, a *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() */ -inline array_t * +array_t * ait_buffer2vars(u_char * __restrict buf, int buflen, int vnum, int zcpy) { return buffer2vars(buf, buflen, vnum, zcpy); @@ -300,7 +290,7 @@ ait_buffer2vars(u_char * __restrict buf, int buflen, i * @vars = Variable array * return: -1 error, 0 nothing done or >0 size of marshaled data */ -inline int +int ait_vars2map(u_char *buf, int buflen, array_t *vars) { return vars2buffer(buf, buflen, 0, vars); @@ -316,7 +306,7 @@ ait_vars2map(u_char *buf, int buflen, array_t *vars) *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() */ -inline array_t * +array_t * ait_map2vars(u_char *buf, int buflen, int vnum, int zcpy) { return buffer2vars(buf, buflen, vnum, zcpy); @@ -331,7 +321,7 @@ ait_map2vars(u_char *buf, int buflen, int vnum, int zc * @varnum = Number of variables * return: =NULL error or !=NULL allocated array */ -inline array_t * +array_t * ait_allocVars(int varnum) { array_t *arr; @@ -359,7 +349,7 @@ ait_allocVars(int varnum) * @n = index of variable into array * return: NULL error or !=NULL ait_val_t element */ -inline ait_val_t * +ait_val_t * ait_getVars(array_t ** __restrict vars, int n) { register int i; @@ -392,7 +382,7 @@ ait_getVars(array_t ** __restrict vars, int n) * @vars = Variable array * return: -1 error or size of array */ -inline int +int ait_clrVars(array_t * __restrict vars) { register int i; @@ -414,7 +404,7 @@ ait_clrVars(array_t * __restrict vars) * @vars = Variable array * return: none */ -inline void +void ait_freeVars(array_t ** __restrict vars) { if (!vars || !*vars) @@ -431,7 +421,7 @@ ait_freeVars(array_t ** __restrict vars) * * return: NULL error or new variable, after use free variable with ait_freeVar() */ -inline ait_val_t * +ait_val_t * ait_allocVar(void) { ait_val_t *v = NULL; @@ -452,7 +442,7 @@ ait_allocVar(void) * @val = Variable * return: none */ -inline void +void ait_freeVar(ait_val_t ** __restrict val) { if (val && *val) { @@ -580,18 +570,18 @@ _cmp_arr_val_desc(const void *a, const void *b) * @cmp = Custom compare function for sorting. If =NULL compare by value * return: none */ -inline void +void ait_sortVarsByVal(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); + qsort(vars->arr_data, vars->arr_num, sizeof(uintptr_t), cmp); 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 - 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); } /* @@ -601,16 +591,16 @@ ait_sortVarsByVal(array_t * __restrict vars, int order * @order = Sort order. If =0 ascend or !=0 descend * return: none */ -inline void +void ait_sortVarsByKey(array_t * __restrict vars, int order) { if (!vars) return; 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 - 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); } /* @@ -634,17 +624,17 @@ ait_findKeyVars(array_t * __restrict vars, u_short key if (array_Copy(&tmp, vars) == -1) return NULL; 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 */ 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! */ v = *vv; break; } 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--; } /* else move left */ } @@ -712,7 +702,7 @@ ait_hashVar(ait_val_t * __restrict v, const char * __r * @vars = Variables * return -1 error or 0 ok */ -inline int +int ait_hashKeyVars(array_t * __restrict vars) { register int i; @@ -733,7 +723,7 @@ ait_hashKeyVars(array_t * __restrict vars) * @key = Search string * 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) { u_short k = 0; @@ -754,7 +744,7 @@ ait_findKeyHash(array_t * __restrict vars, const char * return: -1 error or >0 copied bytes to variable */ int -io_sprintfVar(ait_val_t * __restrict v, const char *fmt, ...) +ait_sprintfVar(ait_val_t * __restrict v, const char *fmt, ...) { int ret = 0; va_list lst; @@ -787,7 +777,7 @@ io_sprintfVar(ait_val_t * __restrict v, const char *fm * @... = data * return: -1 error or 0 ok */ -inline int +int ait_setlikeVar(ait_val_t * __restrict v, ait_type_t t, u_int l, ...) { va_list lst; @@ -822,7 +812,7 @@ ait_setlikeVar(ait_val_t * __restrict v, ait_type_t t, * @v = variable * return: return raw data */ -inline uint64_t +uint64_t ait_getlikeVar(ait_val_t * __restrict v) { if (!v) @@ -838,7 +828,7 @@ ait_getlikeVar(ait_val_t * __restrict v) * @b = 2nd variable * return: 0 is equal or !=0 is different */ -inline int +int ait_cmpVar(ait_val_t * __restrict a, ait_val_t * __restrict b) { intptr_t ret;