/*- * Copyright (c) 2002 Thomas Moestl <tmm@FreeBSD.org> * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $FreeBSD$ *//* ... */#ifndef_ENDIAN_H_#define_ENDIAN_H_#include<stdint.h>#include<sys/types.h>#include"byteswap.h"#ifndefBIG_ENDIAN#defineBIG_ENDIAN4321#endif#ifndefLITTLE_ENDIAN#defineLITTLE_ENDIAN1234#endif#ifndefBYTE_ORDER#ifdef__IEEE_LITTLE_ENDIAN#defineBYTE_ORDERLITTLE_ENDIAN#else#defineBYTE_ORDERBIG_ENDIAN#endif/* ... */#endif#define_UINT8_T_DECLARED#ifndef_UINT8_T_DECLAREDtypedef__uint8_tuint8_t;#define_UINT8_T_DECLARED/* ... */#endif#define_UINT16_T_DECLARED#ifndef_UINT16_T_DECLAREDtypedef__uint16_tuint16_t;#define_UINT16_T_DECLARED/* ... */#endif#define_UINT32_T_DECLARED#ifndef_UINT32_T_DECLAREDtypedef__uint32_tuint32_t;#define_UINT32_T_DECLARED/* ... */#endif#define_UINT64_T_DECLARED#ifndef_UINT64_T_DECLAREDtypedef__uint64_tuint64_t;#define_UINT64_T_DECLARED/* ... */#endif/* * General byte order swapping functions. *//* ... */#definebswap16(x)__bswap16(x)#definebswap32(x)__bswap32(x)#definebswap64(x)__bswap64(x)/* * Host to big endian, host to little endian, big endian to host, and little * endian to host byte order functions as detailed in byteorder(9). *//* ... */#ifBYTE_ORDER==_LITTLE_ENDIAN#definehtobe16(x)bswap16((x))#definehtobe32(x)bswap32((x))#definehtobe64(x)bswap64((x))#definehtole16(x)((uint16_t)(x))#definehtole32(x)((uint32_t)(x))#definehtole64(x)((uint64_t)(x))#definebe16toh(x)bswap16((x))#definebe32toh(x)bswap32((x))#definebe64toh(x)bswap64((x))#definele16toh(x)((uint16_t)(x))#definele32toh(x)((uint32_t)(x))#definele64toh(x)((uint64_t)(x))12 defines/* ... */#else/* _BYTE_ORDER != _LITTLE_ENDIAN */#definehtobe16(x)((uint16_t)(x))#definehtobe32(x)((uint32_t)(x))#definehtobe64(x)((uint64_t)(x))#definehtole16(x)bswap16((x))#definehtole32(x)bswap32((x))#definehtole64(x)bswap64((x))#definebe16toh(x)((uint16_t)(x))#definebe32toh(x)((uint32_t)(x))#definebe64toh(x)((uint64_t)(x))#definele16toh(x)bswap16((x))#definele32toh(x)bswap32((x))#definele64toh(x)bswap64((x))/* ... */#endif/* _BYTE_ORDER == _LITTLE_ENDIAN *//* Alignment-agnostic encode/decode bytestream to/from little/big endian. */#defineINLINE__inline__staticINLINEuint16_tbe16dec(constvoid*pp){uint8_tconst*p=(uint8_tconst*)pp;return((p[0]<<8)|p[1]);}{ ... }staticINLINEuint32_tbe32dec(constvoid*pp){uint8_tconst*p=(uint8_tconst*)pp;return(((unsigned)p[0]<<24)|(p[1]<<16)|(p[2]<<8)|p[3]);}{ ... }staticINLINEuint64_tbe64dec(constvoid*pp){uint8_tconst*p=(uint8_tconst*)pp;return(((uint64_t)be32dec(p)<<32)|be32dec(p+4));}{ ... }staticINLINEuint16_tle16dec(constvoid*pp){uint8_tconst*p=(uint8_tconst*)pp;return((p[1]<<8)|p[0]);}{ ... }staticINLINEuint32_tle32dec(constvoid*pp){uint8_tconst*p=(uint8_tconst*)pp;return(((unsigned)p[3]<<24)|(p[2]<<16)|(p[1]<<8)|p[0]);}{ ... }staticINLINEuint64_tle64dec(constvoid*pp){uint8_tconst*p=(uint8_tconst*)pp;return(((uint64_t)le32dec(p+4)<<32)|le32dec(p));}{ ... }staticINLINEvoidbe16enc(void*pp,uint16_tu){uint8_t*p=(uint8_t*)pp;p[0]=(u>>8)&0xff;p[1]=u&0xff;}{ ... }staticINLINEvoidbe32enc(void*pp,uint32_tu){uint8_t*p=(uint8_t*)pp;p[0]=(u>>24)&0xff;p[1]=(u>>16)&0xff;p[2]=(u>>8)&0xff;p[3]=u&0xff;}{ ... }staticINLINEvoidbe64enc(void*pp,uint64_tu){uint8_t*p=(uint8_t*)pp;be32enc(p,(uint32_t)(u>>32));be32enc(p+4,(uint32_t)(u&0xffffffffU));}{ ... }staticINLINEvoidle16enc(void*pp,uint16_tu){uint8_t*p=(uint8_t*)pp;p[0]=u&0xff;p[1]=(u>>8)&0xff;}{ ... }staticINLINEvoidle32enc(void*pp,uint32_tu){uint8_t*p=(uint8_t*)pp;p[0]=u&0xff;p[1]=(u>>8)&0xff;p[2]=(u>>16)&0xff;p[3]=(u>>24)&0xff;}{ ... }staticINLINEvoidle64enc(void*pp,uint64_tu){uint8_t*p=(uint8_t*)pp;le32enc(p,(uint32_t)(u&0xffffffffU));le32enc(p+4,(uint32_t)(u>>32));}{ ... }/* ... */#endif/* _ENDIAN_H_ */
Details
Show: from
Types: Columns:
All items filtered out
All items filtered out
This file uses the notable symbols shown below. Click anywhere in the file to view more details.