From 04b23addf3733873667675df2439725f076c2f36 Mon Sep 17 00:00:00 2001 From: Lasse Collin Date: Fri, 7 Jun 2024 15:47:20 +0300 Subject: [PATCH] tuklib_integer: Fix building on OpenBSD/sparc64 that uses GCC 4.2 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 Co-authored-by: Brad Smith Closes: https://github.com/tukaani-project/xz/pull/126 --- src/common/tuklib_integer.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/common/tuklib_integer.h b/src/common/tuklib_integer.h index fbd5fb23..dab71ba8 100644 --- a/src/common/tuklib_integer.h +++ b/src/common/tuklib_integer.h @@ -86,9 +86,15 @@ #elif defined(HAVE_SYS_ENDIAN_H) // *BSDs and Darwin # include -# 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