--- libaitio/src/Attic/vars.c 2011/08/31 12:29:32 1.1.2.2 +++ libaitio/src/Attic/vars.c 2011/09/07 01:26:08 1.1.2.5 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: vars.c,v 1.1.2.2 2011/08/31 12:29:32 misho Exp $ +* $Id: vars.c,v 1.1.2.5 2011/09/07 01:26:08 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -54,7 +54,7 @@ SUCH DAMAGE. * return: -1 error, 0 nothing done or >0 size of marshaled data */ int -io_vals2buffer(u_char **buf, int buflen, array_t *vars) +io_vals2buffer(u_char *buf, int buflen, array_t *vars) { int Limit = 0; register int i; @@ -63,7 +63,7 @@ io_vals2buffer(u_char **buf, int buflen, array_t *vars assert(buf); assert(vars); - if (!buf || !vars || !*buf) + if (!buf || !vars) return -1; if (!buflen || !io_arraySize(vars)) return 0; @@ -74,10 +74,10 @@ io_vals2buffer(u_char **buf, int buflen, array_t *vars buflen, Limit); return -1; } else { - memset(*buf, 0, buflen); + memset(buf, 0, buflen); - v = (ait_val_t*) *buf; - data = *buf + Limit; + v = (ait_val_t*) buf; + data = buf + Limit; } /* marshaling */ @@ -112,7 +112,7 @@ io_vals2buffer(u_char **buf, int buflen, array_t *vars memcpy(data, val->val.buffer, AIT_LEN(val)); /* Debug:: data offset in packet, not matter for anything! */ - v[i].val.net = data - *buf; + v[i].val.net = data - buf; data += AIT_LEN(val); break; default: @@ -175,7 +175,11 @@ io_buffer2vals(u_char *buf, int buflen, int vnum, int io_arraySet(vars, i, val); val->val_type = v[i].val_type; +#if defined(__OpenBSD__) AIT_LEN(val) = betoh32(AIT_LEN(&v[i])); +#else + AIT_LEN(val) = be32toh(AIT_LEN(&v[i])); +#endif switch (AIT_TYPE(val)) { case blob: @@ -189,7 +193,11 @@ io_buffer2vals(u_char *buf, int buflen, int vnum, int case u16: case u32: case u64: +#if defined(__OpenBSD__) val->val.net = betoh64(v[i].val.net); +#else + val->val.net = be64toh(v[i].val.net); +#endif break; case buffer: case string: @@ -203,9 +211,16 @@ io_buffer2vals(u_char *buf, int buflen, int vnum, int } else Limit += AIT_LEN(val); - if (!zcpy) - memcpy(val->val.buffer, data, AIT_LEN(val)); - else + if (!zcpy) { + val->val.buffer = malloc(AIT_LEN(val)); + if (!val->val.buffer) { + LOGERR; + io_arrayFree(vars); + io_arrayDestroy(&vars); + return NULL; + } else + memcpy(val->val.buffer, data, AIT_LEN(val)); + } else val->val.buffer = data; data += AIT_LEN(val); break;