--- libelwix/src/pack.c 2013/06/30 21:46:59 1.1.2.4 +++ libelwix/src/pack.c 2013/06/30 22:06:25 1.1.2.5 @@ -130,3 +130,84 @@ rpack_uint16(rpack_t * __restrict rp, uint16_t * __res 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; +}