From: Darren Tucker Date: Wed, 26 Feb 2025 07:16:03 +0000 (+1100) Subject: Check for le32toh, le64toh, htole64 individually. X-Git-Tag: V_10_0_P1~61 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dfd9880585db1570656022f9fe1519df673f7b8a;p=thirdparty%2Fopenssh-portable.git Check for le32toh, le64toh, htole64 individually. 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@ --- diff --git a/configure.ac b/configure.ac index b802d0e60..f9c7729a5 100644 --- a/configure.ac +++ b/configure.ac @@ -531,6 +531,18 @@ AC_CHECK_HEADERS([ \ wchar.h \ ]) +AC_CHECK_DECLS([le32toh, le64toh, htole64], [], [], [ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_ENDIAN_H +# include +#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], [], [], [ diff --git a/defines.h b/defines.h index 50797de8b..d2baeb940 100644 --- 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