]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
tuklib_integer: Fix building on OpenBSD/sparc64 that uses GCC 4.2
authorLasse Collin <lasse.collin@tukaani.org>
Fri, 7 Jun 2024 12:47:20 +0000 (15:47 +0300)
committerLasse Collin <lasse.collin@tukaani.org>
Fri, 6 Sep 2024 15:51:59 +0000 (18:51 +0300)
GCC 4.2 doesn't have __builtin_bswap16() and friends so tuklib_integer.h
tries to use OS-specific byte swap methods instead. On OpenBSD those
macros are swap16/32/64 instead of bswap16/32/64 like on other *BSDs
and Darwin.

An alternative to "#ifdef __OpenBSD__" could be "#ifdef swap16" as it
is a macro. But since OpenBSD seems to be a special case under this
special case of "*BSDs and Darwin", checking for __OpenBSD__ seems
the more conservative choice now.

Thanks to Christian Weisgerber and Brad Smith who both submitted
the same patch a few hours apart.

Co-authored-by: Christian Weisgerber <naddy@mips.inka.de>
Co-authored-by: Brad Smith <brad@comstyle.com>
Closes: https://github.com/tukaani-project/xz/pull/126
(cherry picked from commit 04b23addf3733873667675df2439725f076c2f36)

src/common/tuklib_integer.h

index fbd5fb2369a2db60915fce517ea1f8516a7231ff..dab71ba8c1f1f219a399d12e586474478a2c1880 100644 (file)
 #elif defined(HAVE_SYS_ENDIAN_H)
        // *BSDs and Darwin
 #      include <sys/endian.h>
-#      define byteswap16(num) bswap16(num)
-#      define byteswap32(num) bswap32(num)
-#      define byteswap64(num) bswap64(num)
+#      ifdef __OpenBSD__
+#              define byteswap16(num) swap16(num)
+#              define byteswap32(num) swap32(num)
+#              define byteswap64(num) swap64(num)
+#      else
+#              define byteswap16(num) bswap16(num)
+#              define byteswap32(num) bswap32(num)
+#              define byteswap64(num) bswap64(num)
+#      endif
 
 #elif defined(HAVE_SYS_BYTEORDER_H)
        // Solaris