1*b636d99dSDavid van Moolenbroek /*- 2*b636d99dSDavid van Moolenbroek * Copyright (c) 2003, 2004 David Young. All rights reserved. 3*b636d99dSDavid van Moolenbroek * 4*b636d99dSDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without 5*b636d99dSDavid van Moolenbroek * modification, are permitted provided that the following conditions 6*b636d99dSDavid van Moolenbroek * are met: 7*b636d99dSDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright 8*b636d99dSDavid van Moolenbroek * notice, this list of conditions and the following disclaimer. 9*b636d99dSDavid van Moolenbroek * 2. Redistributions in binary form must reproduce the above copyright 10*b636d99dSDavid van Moolenbroek * notice, this list of conditions and the following disclaimer in the 11*b636d99dSDavid van Moolenbroek * documentation and/or other materials provided with the distribution. 12*b636d99dSDavid van Moolenbroek * 13*b636d99dSDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY DAVID YOUNG ``AS IS'' AND ANY 14*b636d99dSDavid van Moolenbroek * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 15*b636d99dSDavid van Moolenbroek * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 16*b636d99dSDavid van Moolenbroek * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DAVID 17*b636d99dSDavid van Moolenbroek * YOUNG BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18*b636d99dSDavid van Moolenbroek * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 19*b636d99dSDavid van Moolenbroek * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20*b636d99dSDavid van Moolenbroek * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 21*b636d99dSDavid van Moolenbroek * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 22*b636d99dSDavid van Moolenbroek * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*b636d99dSDavid van Moolenbroek * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 24*b636d99dSDavid van Moolenbroek * OF SUCH DAMAGE. 25*b636d99dSDavid van Moolenbroek */ 26*b636d99dSDavid van Moolenbroek 27*b636d99dSDavid van Moolenbroek #ifndef _CPACK_H 28*b636d99dSDavid van Moolenbroek #define _CPACK_H 29*b636d99dSDavid van Moolenbroek 30*b636d99dSDavid van Moolenbroek struct cpack_state { 31*b636d99dSDavid van Moolenbroek uint8_t *c_buf; 32*b636d99dSDavid van Moolenbroek uint8_t *c_next; 33*b636d99dSDavid van Moolenbroek size_t c_len; 34*b636d99dSDavid van Moolenbroek }; 35*b636d99dSDavid van Moolenbroek 36*b636d99dSDavid van Moolenbroek int cpack_init(struct cpack_state *, uint8_t *, size_t); 37*b636d99dSDavid van Moolenbroek 38*b636d99dSDavid van Moolenbroek int cpack_uint8(struct cpack_state *, uint8_t *); 39*b636d99dSDavid van Moolenbroek int cpack_uint16(struct cpack_state *, uint16_t *); 40*b636d99dSDavid van Moolenbroek int cpack_uint32(struct cpack_state *, uint32_t *); 41*b636d99dSDavid van Moolenbroek int cpack_uint64(struct cpack_state *, uint64_t *); 42*b636d99dSDavid van Moolenbroek 43*b636d99dSDavid van Moolenbroek uint8_t *cpack_next_boundary(uint8_t *buf, uint8_t *p, size_t alignment); 44*b636d99dSDavid van Moolenbroek uint8_t *cpack_align_and_reserve(struct cpack_state *cs, size_t wordsize); 45*b636d99dSDavid van Moolenbroek 46*b636d99dSDavid van Moolenbroek #define cpack_int8(__s, __p) cpack_uint8((__s), (uint8_t*)(__p)) 47*b636d99dSDavid van Moolenbroek #define cpack_int16(__s, __p) cpack_uint16((__s), (uint16_t*)(__p)) 48*b636d99dSDavid van Moolenbroek #define cpack_int32(__s, __p) cpack_uint32((__s), (uint32_t*)(__p)) 49*b636d99dSDavid van Moolenbroek #define cpack_int64(__s, __p) cpack_uint64((__s), (uint64_t*)(__p)) 50*b636d99dSDavid van Moolenbroek 51*b636d99dSDavid van Moolenbroek extern int cpack_advance(struct cpack_state *, const size_t); 52*b636d99dSDavid van Moolenbroek 53*b636d99dSDavid van Moolenbroek #endif /* _CPACK_H */ 54