commit:     3c7d0c1fc96b5b4dd4ad858e4a27a0d06c823478
Author:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
AuthorDate: Sun Sep  5 16:36:30 2021 +0000
Commit:     Arthur Zamarin <arthurzam <AT> gentoo <DOT> org>
CommitDate: Sun Sep  5 16:40:19 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3c7d0c1f

dev-libs/crc32c: fix for big endian systems

Closes: https://bugs.gentoo.org/810688
Signed-off-by: Arthur Zamarin <arthurzam <AT> gentoo.org>

 ...{crc32c-1.0.6.ebuild => crc32c-1.0.6-r1.ebuild} |  4 +++
 .../crc32c/files/crc32c-1.0.6-fix-big-endian.patch | 29 ++++++++++++++++++++++
 2 files changed, 33 insertions(+)

diff --git a/dev-libs/crc32c/crc32c-1.0.6.ebuild 
b/dev-libs/crc32c/crc32c-1.0.6-r1.ebuild
similarity index 92%
rename from dev-libs/crc32c/crc32c-1.0.6.ebuild
rename to dev-libs/crc32c/crc32c-1.0.6-r1.ebuild
index baf1e8683e9..53b6e710e34 100644
--- a/dev-libs/crc32c/crc32c-1.0.6.ebuild
+++ b/dev-libs/crc32c/crc32c-1.0.6-r1.ebuild
@@ -13,6 +13,10 @@ LICENSE="BSD"
 SLOT="0"
 KEYWORDS="amd64 ~riscv x86"
 
+PATCHES=(
+       "${FILESDIR}/${P}-fix-big-endian.patch"
+)
+
 DOCS=( README.md )
 
 src_prepare() {

diff --git a/dev-libs/crc32c/files/crc32c-1.0.6-fix-big-endian.patch 
b/dev-libs/crc32c/files/crc32c-1.0.6-fix-big-endian.patch
new file mode 100644
index 00000000000..3bd09930946
--- /dev/null
+++ b/dev-libs/crc32c/files/crc32c-1.0.6-fix-big-endian.patch
@@ -0,0 +1,29 @@
+From: Pieter Wuille <[email protected]>
+Date: Thu, 18 Jun 2020 21:05:38 -0700
+Subject: [PATCH] Fix (unused) ReadUint64LE for BE machines (#41)
+
+--- a/src/crc32c_read_le.h
++++ b/src/crc32c_read_le.h
+@@ -30,14 +30,14 @@ inline uint32_t ReadUint32LE(const uint8_t* buffer) {
+ // Reads a little-endian 64-bit integer from a 64-bit-aligned buffer.
+ inline uint64_t ReadUint64LE(const uint8_t* buffer) {
+ #if BYTE_ORDER_BIG_ENDIAN
+-  return ((static_cast<uint32_t>(static_cast<uint8_t>(buffer[0]))) |
+-          (static_cast<uint32_t>(static_cast<uint8_t>(buffer[1])) << 8) |
+-          (static_cast<uint32_t>(static_cast<uint8_t>(buffer[2])) << 16) |
+-          (static_cast<uint32_t>(static_cast<uint8_t>(buffer[3])) << 24) |
+-          (static_cast<uint32_t>(static_cast<uint8_t>(buffer[4])) << 32) |
+-          (static_cast<uint32_t>(static_cast<uint8_t>(buffer[5])) << 40) |
+-          (static_cast<uint32_t>(static_cast<uint8_t>(buffer[6])) << 48) |
+-          (static_cast<uint32_t>(static_cast<uint8_t>(buffer[7])) << 56));
++  return ((static_cast<uint64_t>(static_cast<uint8_t>(buffer[0]))) |
++          (static_cast<uint64_t>(static_cast<uint8_t>(buffer[1])) << 8) |
++          (static_cast<uint64_t>(static_cast<uint8_t>(buffer[2])) << 16) |
++          (static_cast<uint64_t>(static_cast<uint8_t>(buffer[3])) << 24) |
++          (static_cast<uint64_t>(static_cast<uint8_t>(buffer[4])) << 32) |
++          (static_cast<uint64_t>(static_cast<uint8_t>(buffer[5])) << 40) |
++          (static_cast<uint64_t>(static_cast<uint8_t>(buffer[6])) << 48) |
++          (static_cast<uint64_t>(static_cast<uint8_t>(buffer[7])) << 56));
+ #else   // !BYTE_ORDER_BIG_ENDIAN
+   uint64_t result;
+   // This should be optimized to a single instruction.

Reply via email to