--- libaitio/inc/aitio.h 2012/04/11 15:01:03 1.16.2.12 +++ libaitio/inc/aitio.h 2012/05/15 13:15:43 1.17.4.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitio.h,v 1.16.2.12 2012/04/11 15:01:03 misho Exp $ +* $Id: aitio.h,v 1.17.4.1 2012/05/15 13:15:43 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -157,9 +157,12 @@ typedef struct { __val->val.buffer = malloc(_len); \ if (__val->val.buffer) { \ __val->val_type = buffer; AIT_LEN(__val) = _len; \ - memcpy(__val->val.buffer, (_v), _len); \ + if ((_v)) \ + memcpy(__val->val.buffer, (_v), _len); \ + else \ + memset(__val->val.buffer, 0, _len); \ } } while (0) -#define AIT_SET_STR(_vl, _v) do { ait_val_t *__val = (_vl); assert(__val); \ +#define AIT_SET_STR(_vl, _v) do { ait_val_t *__val = (_vl); assert(__val && (_v)); \ __val->val.string = (int8_t*) strdup((_v)); \ if (__val->val.string) { \ __val->val_type = string; \ @@ -357,7 +360,7 @@ inline ait_val_t *io_allocVar(void); * @val = Variable * return: none */ -inline void io_freeVar(ait_val_t * __restrict val); +inline void io_freeVar(ait_val_t ** __restrict val); /* * io_allocVars() - Allocate ait_val_t array * @@ -597,10 +600,11 @@ int io_arrayGrow(array_t * __restrict arr, int newNumI int io_arrayVacuum(array_t * __restrict arr, int fromWhere); #define io_arraySize(_arr) ((_arr) ? (_arr)->arr_num : 0) -#define io_arrayLast(_arr) ((_arr) ? (_arr)->arr_last : -1) +#define io_arrayLast(_arr) (io_arraySize((_arr)) ? (_arr)->arr_last : -1) #define io_arrayZero(_arr) (assert((_arr)), memset((_arr)->arr_data, 0, \ io_arraySize((_arr)) * sizeof(void*))) +#define io_arrayGet2(_arr, _d) (assert((_arr) && (_arr)->arr_num > _d), ((_arr)->arr_data + _d)) #define io_arrayGet(_arr, _d) (assert((_arr) && (_arr)->arr_num > _d), *((_arr)->arr_data + _d)) #define io_array(_arr, _d, _type) (assert((_arr) && (_arr)->arr_num > _d), \ ((_type) *((_arr)->arr_data + _d)))