/* apk_endian.h - Alpine Package Keeper (APK) * * Copyright (C) 2005-2008 Natanael Copa <n@tanael.org> * Copyright (C) 2008-2011 Timo Teräs <timo.teras@iki.fi> * Copyright (C) 2011 Rich Felker * All rights reserved. * * SPDX-License-Identifier: GPL-2.0-only */ #ifndef APK_ENDIAN_H #define APK_ENDIAN_H static __inline uint16_t __bswap16(uint16_t __x) { return (__x<<8) | (__x>>8); } static __inline uint32_t __bswap32(uint32_t __x) { return (__x>>24) | (__x>>8&0xff00) | (__x<<8&0xff0000) | (__x<<24); } static __inline uint64_t __bswap64(uint64_t __x) { return (__bswap32(__x)+0ULL)<<32 | __bswap32(__x>>32); } #ifndef WORDS_BIGENDIAN # define htobe16(x) __bswap16(x) # define be16toh(x) __bswap16(x) # define htobe32(x) __bswap32(x) # define be32toh(x) __bswap32(x) # define htobe64(x) __bswap64(x) # define be64toh(x) __bswap64(x) # define htole16(x) (uint16_t)(x) # define le16toh(x) (uint16_t)(x) # define htole32(x) (uint32_t)(x) # define le32toh(x) (uint32_t)(x) # define htole64(x) (uint64_t)(x) # define le64toh(x) (uint64_t)(x) #else # define htobe16(x) (uint16_t)(x) # define be16toh(x) (uint16_t)(x) # define htobe32(x) (uint32_t)(x) # define be32toh(x) (uint32_t)(x) # define htobe64(x) (uint64_t)(x) # define be64toh(x) (uint64_t)(x) # define htole16(x) __bswap16(x) # define le16toh(x) __bswap16(x) # define htole32(x) __bswap32(x) # define le32toh(x) __bswap32(x) # define htole64(x) __bswap64(x) # define le64toh(x) __bswap64(x) #endif #endif