--- libaitio/src/Attic/vars.c 2012/05/14 12:49:21 1.6 +++ libaitio/src/Attic/vars.c 2012/07/03 08:51:05 1.10 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: vars.c,v 1.6 2012/05/14 12:49:21 misho Exp $ +* $Id: vars.c,v 1.10 2012/07/03 08:51:05 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -179,7 +179,7 @@ io_buffer2vars(u_char *buf, int buflen, int vnum, int /* de-marshaling */ for (i = 0; i < io_arraySize(vars); i++) { if (!zcpy) { - val = malloc(sizeof(ait_val_t)); + val = io_malloc(sizeof(ait_val_t)); if (!val) { LOGERR; io_arrayFree(vars); @@ -233,7 +233,7 @@ io_buffer2vars(u_char *buf, int buflen, int vnum, int Limit += AIT_LEN(val); if (!zcpy) { - val->val.buffer = malloc(AIT_LEN(val)); + val->val.buffer = io_malloc(AIT_LEN(val)); if (!val->val.buffer) { LOGERR; io_arrayFree(vars); @@ -393,7 +393,7 @@ io_map2vars(u_char *buf, int buflen, int vnum, int zcp /* de-marshaling */ for (i = 0; i < io_arraySize(vars); i++) { if (!zcpy) { - val = malloc(sizeof(ait_val_t)); + val = io_malloc(sizeof(ait_val_t)); if (!val) { LOGERR; io_arrayFree(vars); @@ -438,7 +438,7 @@ io_map2vars(u_char *buf, int buflen, int vnum, int zcp Limit += AIT_LEN(val); if (!zcpy) { - val->val.buffer = malloc(AIT_LEN(val)); + val->val.buffer = io_malloc(AIT_LEN(val)); if (!val->val.buffer) { LOGERR; io_arrayFree(vars); @@ -477,7 +477,7 @@ io_allocVars(int varnum) register int i; ait_val_t *v; - if (!varnum || !(arr = io_arrayInit(varnum))) + if (!(arr = io_arrayInit(varnum))) return NULL; for (i = 0; i < io_arraySize(arr); i++) { @@ -492,6 +492,42 @@ io_allocVars(int varnum) } /* + * io_getVars() - Get ait_val_t element from array and if not exists allocate it + * + * @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 @@ -501,12 +537,14 @@ inline int io_clrVars(array_t * __restrict vars) { register int i; + ait_val_t *v; if (!vars) return -1; for (i = 0; i < io_arraySize(vars); i++) - io_freeVar((ait_val_t**) io_arrayGet2(vars, i)); + if ((v = io_array(vars, i, ait_val_t*))) + AIT_FREE_VAL(v); return io_arraySize(vars); } @@ -524,6 +562,7 @@ io_freeVars(array_t ** __restrict vars) return; io_clrVars(*vars); + io_arrayFree(*vars); io_arrayDestroy(vars); } @@ -537,7 +576,7 @@ io_allocVar(void) { ait_val_t *v = NULL; - v = malloc(sizeof(ait_val_t)); + v = io_malloc(sizeof(ait_val_t)); if (!v) { LOGERR; return NULL; @@ -559,7 +598,7 @@ io_freeVar(ait_val_t ** __restrict val) { if (val && *val) { AIT_FREE_VAL(*val); - free(*val); + io_free(*val); *val = NULL; } }