[git commit] Move get_unaligned_le32() macros to platform.h

Denys Vlasenko vda.linux at googlemail.com
Sat Jul 15 18:22:25 UTC 2017


commit: https://git.busybox.net/busybox/commit/?id=2c1258c620c5847649367394439cc10d0331d211
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 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 cd32cc7..350e535 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 6c7d03d..8210e5c 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 6992f1c..c137442 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.


More information about the busybox-cvs mailing list