--- libelwix/src/pack.c 2013/06/28 15:30:46 1.1.2.3 +++ libelwix/src/pack.c 2013/06/30 22:10:27 1.2 @@ -125,8 +125,89 @@ rpack_uint16(rpack_t * __restrict rp, uint16_t * __res u = EXTRACT_LE_16(next); if (n) - EXTRACT_SET_16(next, *n); + RPACK_SET_16(next, n); rp->r_next = next + sizeof(uint16_t); + return u; +} + +/* + * rpack_uint24() - Pack/Unpack 24bit value + * + * @rp = raw buffer + * @n = set value if !=NULL + * return: -1 error or get value + */ +uint32_t +rpack_uint24(rpack_t * __restrict rp, uint32_t * __restrict n) +{ + uint32_t u; + uint8_t *next; + + if (!RPACK_SANITY(rp)) + return (uint32_t) -1; + /* No space left */ + if (!(next = rpack_align_and_reserve(rp, sizeof(uint32_t)))) + return (uint32_t) -1; + + u = EXTRACT_LE_24(next); + if (n) + RPACK_SET_24(next, n); + + rp->r_next = next + sizeof(uint32_t); + return u; +} + +/* + * rpack_uint32() - Pack/Unpack 32bit value + * + * @rp = raw buffer + * @n = set value if !=NULL + * return: -1 error or get value + */ +uint32_t +rpack_uint32(rpack_t * __restrict rp, uint32_t * __restrict n) +{ + uint32_t u; + uint8_t *next; + + if (!RPACK_SANITY(rp)) + return (uint32_t) -1; + /* No space left */ + if (!(next = rpack_align_and_reserve(rp, sizeof(uint32_t)))) + return (uint32_t) -1; + + u = EXTRACT_LE_32(next); + if (n) + RPACK_SET_32(next, n); + + rp->r_next = next + sizeof(uint32_t); + return u; +} + +/* + * rpack_uint64() - Pack/Unpack 64bit value + * + * @rp = raw buffer + * @n = set value if !=NULL + * return: -1 error or get value + */ +uint64_t +rpack_uint64(rpack_t * __restrict rp, uint64_t * __restrict n) +{ + uint64_t u; + uint8_t *next; + + if (!RPACK_SANITY(rp)) + return (uint64_t) -1; + /* No space left */ + if (!(next = rpack_align_and_reserve(rp, sizeof(uint64_t)))) + return (uint64_t) -1; + + u = EXTRACT_LE_64(next); + if (n) + RPACK_SET_64(next, n); + + rp->r_next = next + sizeof(uint64_t); return u; }