From 2c1258c620c5847649367394439cc10d0331d211 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sat, 15 Jul 2017 20:22:25 +0200 Subject: [PATCH] Move get_unaligned_le32() macros to platform.h Signed-off-by: Denys Vlasenko --- archival/libarchive/decompress_unxz.c | 16 +++++++++++----- include/platform.h | 6 ++++++ networking/tls_aes.c | 4 ---- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/archival/libarchive/decompress_unxz.c b/archival/libarchive/decompress_unxz.c index cd32cc745..350e5358a 100644 --- a/archival/libarchive/decompress_unxz.c +++ b/archival/libarchive/decompress_unxz.c @@ -27,11 +27,17 @@ static uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc) return ~crc32_block_endian0(~crc, buf, size, global_crc32_table); } -/* We use arch-optimized unaligned accessors */ -#define get_unaligned_le32(buf) ({ uint32_t v; move_from_unaligned32(v, buf); SWAP_LE32(v); }) -#define get_unaligned_be32(buf) ({ uint32_t v; move_from_unaligned32(v, buf); SWAP_BE32(v); }) -#define put_unaligned_le32(val, buf) move_to_unaligned32(buf, SWAP_LE32(val)) -#define put_unaligned_be32(val, buf) move_to_unaligned32(buf, SWAP_BE32(val)) +/* We use arch-optimized unaligned fixed-endian accessors. + * They have been moved to libbb (proved to be useful elsewhere as well), + * just check that we have them defined: + */ +#if !defined(get_unaligned_le32) \ + || !defined(get_unaligned_be32) \ + || !defined(put_unaligned_le32) \ + || !defined(put_unaligned_be32) +# error get_unaligned_le32 accessors are not defined +#endif +#define get_le32(p) (*(uint32_t*)(p)) #include "unxz/xz_dec_bcj.c" #include "unxz/xz_dec_lzma2.c" diff --git a/include/platform.h b/include/platform.h index 6c7d03dc7..8210e5c49 100644 --- a/include/platform.h +++ b/include/platform.h @@ -247,6 +247,12 @@ typedef uint64_t bb__aliased_uint64_t FIX_ALIASING; } while (0) #endif +/* Unaligned, fixed-endian accessors */ +#define get_unaligned_le32(buf) ({ uint32_t v; move_from_unaligned32(v, buf); SWAP_LE32(v); }) +#define get_unaligned_be32(buf) ({ uint32_t v; move_from_unaligned32(v, buf); SWAP_BE32(v); }) +#define put_unaligned_le32(val, buf) move_to_unaligned32(buf, SWAP_LE32(val)) +#define put_unaligned_be32(val, buf) move_to_unaligned32(buf, SWAP_BE32(val)) + /* ---- Size-saving "small" ints (arch-dependent) ----------- */ diff --git a/networking/tls_aes.c b/networking/tls_aes.c index 6992f1c90..c137442e9 100644 --- a/networking/tls_aes.c +++ b/networking/tls_aes.c @@ -40,10 +40,6 @@ */ #include "tls.h" -/* TODO: grep for this and move to libbb */ -#define get_unaligned_be32(buf) ({ uint32_t v; move_from_unaligned32(v, buf); SWAP_BE32(v); }) - - // The lookup-tables are marked const so they can be placed in read-only storage instead of RAM // The numbers below can be computed dynamically trading ROM for RAM - // This can be useful in (embedded) bootloader applications, where ROM is often limited. -- 2.25.1