--- libelwix/src/pack.c 2013/06/28 11:06:31 1.1.2.2 +++ libelwix/src/pack.c 2013/06/28 15:30:46 1.1.2.3 @@ -88,13 +88,45 @@ rpack_align_and_reserve(rpack_t * __restrict rp, size_ uint8_t rpack_uint8(rpack_t * __restrict rp, uint8_t * __restrict n) { + uint8_t u; + if (!RPACK_SANITY(rp)) return (uint8_t) -1; /* No space left */ if ((size_t) (rp->r_next - rp->r_buf) >= rp->r_len) return (uint8_t) -1; + u = *rp->r_next; if (n) *rp->r_next = *n; - return *rp->r_next++; + + rp->r_next++; + return u; +} + +/* + * rpack_uint16() - Pack/Unpack 16bit value + * + * @rp = raw buffer + * @n = set value if !=NULL + * return: -1 error or get value + */ +uint16_t +rpack_uint16(rpack_t * __restrict rp, uint16_t * __restrict n) +{ + uint16_t u; + uint8_t *next; + + if (!RPACK_SANITY(rp)) + return (uint16_t) -1; + /* No space left */ + if (!(next = rpack_align_and_reserve(rp, sizeof(uint16_t)))) + return (uint16_t) -1; + + u = EXTRACT_LE_16(next); + if (n) + EXTRACT_SET_16(next, *n); + + rp->r_next = next + sizeof(uint16_t); + return u; }