12949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project/*-
22949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Copyright (c) 2003, 2004 David Young.  All rights reserved.
32949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
42949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * Redistribution and use in source and binary forms, with or without
52949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * modification, are permitted provided that the following conditions
62949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * are met:
72949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
82949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
92949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
102949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
112949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *    documentation and/or other materials provided with the distribution.
122949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * 3. The name of David Young may not be used to endorse or promote
132949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *    products derived from this software without specific prior
142949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *    written permission.
152949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project *
162949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY DAVID YOUNG ``AS IS'' AND ANY
172949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
182949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
192949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL DAVID
202949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * YOUNG BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
212949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
222949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
232949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
242949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
252949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
262949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
272949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project * OF SUCH DAMAGE.
282949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project */
292949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
302949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#ifndef _CPACK_H
312949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define _CPACK_H
322949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
332949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectstruct cpack_state {
342949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t					*c_buf;
352949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	u_int8_t					*c_next;
362949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project	size_t						 c_len;
372949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project};
382949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
392949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectint cpack_init(struct cpack_state *, u_int8_t *, size_t);
402949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
412949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectint cpack_uint8(struct cpack_state *, u_int8_t *);
422949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectint cpack_uint16(struct cpack_state *, u_int16_t *);
432949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectint cpack_uint32(struct cpack_state *, u_int32_t *);
442949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Projectint cpack_uint64(struct cpack_state *, u_int64_t *);
452949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
462949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define cpack_int8(__s, __p)	cpack_uint8((__s),  (u_int8_t*)(__p))
472949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define cpack_int16(__s, __p)	cpack_uint16((__s), (u_int16_t*)(__p))
482949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define cpack_int32(__s, __p)	cpack_uint32((__s), (u_int32_t*)(__p))
492949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#define cpack_int64(__s, __p)	cpack_uint64((__s), (u_int64_t*)(__p))
502949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project
512949f58a438f6fd85f66a8b7ed4708042cde4b37The Android Open Source Project#endif /* _CPACK_H */
52