--- libaitio/inc/aitio.h 2011/08/31 12:46:58 1.11.2.7 +++ libaitio/inc/aitio.h 2011/09/05 01:07:20 1.11.2.12 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitio.h,v 1.11.2.7 2011/08/31 12:46:58 misho Exp $ +* $Id: aitio.h,v 1.11.2.12 2011/09/05 01:07:20 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -160,7 +160,7 @@ typedef struct { __val->val_type = buffer; AIT_LEN(__val) = _len; \ memcpy(__val->val.buffer, (_v), _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); assert((_v)); \ __val->val.string = (int8_t*) strdup((_v)); \ if (__val->val.string) { \ __val->val_type = string; \ @@ -172,6 +172,7 @@ typedef struct { #define AIT_SET_BLOB2(_vl, _bv) do { ait_val_t *__val = (_vl); assert(__val); assert((_bv)); \ __val->val_type = blob; AIT_LEN(__val) = (_bv)->blob_len; \ __val->val.blob = (_bv)->blob_var; } while (0) +#define AIT_NEW_BLOB(_vl, _len) AIT_SET_BLOB((_vl), 0, _len) #define AIT_SET_U8(_vl, _n) do { ait_val_t *__val = (_vl); assert(__val); \ __val->val_type = u8; __val->val.u8 = _n; \ @@ -240,7 +241,7 @@ inline const char *io_GetError(); * @vars = Variable array * return: -1 error, 0 nothing done or >0 size of marshaled data */ -int io_vals2buffer(unsigned char **buf, int buflen, array_t *vars); +int io_vals2buffer(unsigned char *buf, int buflen, array_t *vars); /* * io_buffer2vals() De-marshaling data from buffer to array with variables * @buf = Buffer @@ -425,7 +426,7 @@ int io_arrayGrow(array_t * __restrict arr, int newNumI */ int io_arrayVacuum(array_t * __restrict arr, int fromWhere); -#define io_arraySize(_arr) (assert((_arr)), (_arr)->arr_num) +#define io_arraySize(_arr) ((_arr) ? (_arr)->arr_num : 0) #define io_arrayZero(_arr) (assert((_arr)), memset((_arr)->arr_data, 0, \ io_arraySize((_arr)) * sizeof(void*))) @@ -518,7 +519,15 @@ int io_sarrGrow(sarr_t * __restrict arr, int newNumIte * return: -1 error, >-1 freed segments */ inline int io_sarrVacuum(sarr_t * __restrict arr); -#define io_sarrSize(_arr) (assert((_arr)), (_arr)->sarr_num) +#define io_sarrSize(_arr) ((_arr) ? (_arr)->sarr_num : 0) +#define io_sarrSeg(_arr) (assert((_arr)), (_arr)->sarr_seg) +/* + * io_sarrCopy() Copy source split array to destination split array + * @dest = Destination split array, after use free with io_sarrDestroy() + * @src = Source split array + * return: -1 error; >0 count of destination split array + */ +int io_sarrCopy(sarr_t ** __restrict dest, sarr_t * __restrict src); /* * io_sarrGet() - Get element from dynamic split-order array * @arr = Array