]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
Check for le32toh, le64toh, htole64 individually.
authorDarren Tucker <dtucker@dtucker.net>
Wed, 26 Feb 2025 07:16:03 +0000 (18:16 +1100)
committerDarren Tucker <dtucker@dtucker.net>
Wed, 26 Feb 2025 07:24:58 +0000 (18:24 +1100)
It appears that at least some versions of endian.h in glibc do not have
the latter two, so check for and replace each one individually.
bz#3794, ok djm@

configure.ac
defines.h

index 9053a9a2bc9373444d4f7f28ad54fd91d910147f..57a8d1007d1a79517bb30c7921be3f4be113e007 100644 (file)
@@ -536,6 +536,18 @@ AC_CHECK_HEADERS([ \
        wchar.h \
 ])
 
+AC_CHECK_DECLS([le32toh, le64toh, htole64], [], [], [
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_ENDIAN_H
+# include <endian.h>
+#endif
+])
+
 # On some platforms (eg SunOS4) sys/audit.h requires sys/[time|types|label.h]
 # to be included first.
 AC_CHECK_HEADERS([sys/audit.h], [], [], [
index c1c21aba616eb0dac1e5782d54c0ab93fbc591ae..090f49f551332dd1d46aef7b7e080d8aa2a0cd28 100644 (file)
--- a/defines.h
+++ b/defines.h
@@ -646,7 +646,9 @@ struct winsize {
 # endif /* WORDS_BIGENDIAN */
 #endif /* BYTE_ORDER */
 
-#ifndef HAVE_ENDIAN_H
+#if (defined(HAVE_DECL_LE32TOH) && HAVE_DECL_LE32TOH == 0) || \
+    (defined(HAVE_DECL_LE64TOH) && HAVE_DECL_LE64TOH == 0) || \
+    (defined(HAVE_DECL_HTOLE64) && HAVE_DECL_HTOLE64 == 0)
 # define openssh_swap32(v)                                     \
        (uint32_t)(((uint32_t)(v) & 0xff) << 24 |               \
        ((uint32_t)(v) & 0xff00) << 8 |                         \
@@ -662,13 +664,25 @@ struct winsize {
        ((uint64_t)(v) & 0xff000000000000ULL) >> 40 |           \
        ((uint64_t)(v) & 0xff00000000000000ULL) >> 56)
 # ifdef WORDS_BIGENDIAN
-#  define le32toh(v) (openssh_swap32(v))
-#  define le64toh(v) (openssh_swap64(v))
-#  define htole64(v) (openssh_swap64(v))
+#  if defined(HAVE_DECL_LE32TOH) && HAVE_DECL_LE32TOH == 0
+#   define le32toh(v) (openssh_swap32(v))
+#  endif
+#  if defined(HAVE_DECL_LE64TOH) && HAVE_DECL_LE64TOH == 0
+#   define le64toh(v) (openssh_swap64(v))
+#  endif
+#  if defined(HAVE_DECL_HTOLE64) && HAVE_DECL_HTOLE64 == 0
+#   define htole64(v) (openssh_swap64(v))
+# endif
 # else
-#  define le32toh(v) ((uint32_t)v)
-#  define le64toh(v) ((uint64_t)v)
-#  define htole64(v) ((uint64_t)v)
+#  if defined(HAVE_DECL_LE32TOH) && HAVE_DECL_LE32TOH == 0
+#   define le32toh(v) ((uint32_t)v)
+#  endif
+#  if defined(HAVE_DECL_LE64TOH) && HAVE_DECL_LE64TOH == 0
+#    define le64toh(v) ((uint64_t)v)
+#  endif
+#  if defined(HAVE_DECL_HTOLE64) && HAVE_DECL_HTOLE64 == 0
+#   define htole64(v) ((uint64_t)v)
+#  endif
 # endif
 #endif