]> 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:16:03 +0000 (18:16 +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 b802d0e60b713cc44d65997b6665c6ac0686e6c2..f9c7729a54cf499bfb1990ed40c8bfcd06292bda 100644 (file)
@@ -531,6 +531,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 50797de8b46084ba2e58508f6ba515244c4674f0..d2baeb9407bd649cdb285a6910bb683453c10af7 100644 (file)
--- a/defines.h
+++ b/defines.h
@@ -648,7 +648,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 |                         \
@@ -664,13 +666,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