+2001-03-27 John Hughes <john@Calva.COM>
+
+ * aclocal.m4: add check for endianness of long long.
+ * acconfig.h: add #define for LITTLE_ENDIAN_LONG_LONG.
+ * configure.in: check for endianness of long long.
+ * defs.h: change LONG_LONG macro to wirk with either endianness of
+ long long.
+
2001-03-27 John Hughes <john@Calva.COM>
* net.c: Make compilable by SCO UDK compiler (doesn't like empty
/* Define if have st_gen in struct stat */
#undef HAVE_ST_GEN
+
+/* Define if have little endiang long long */
+#undef HAVE_LITTLE_ENDIAN_LONG_LONG
fi
])
+dnl ### A macro to determine endianness of long long
+AC_DEFUN(AC_LITTLE_ENDIAN_LONG_LONG,
+[AC_MSG_CHECKING(for little endian long long)
+AC_CACHE_VAL(ac_cv_have_little_endian_long_long,
+[AC_TRY_RUN([
+int main () {
+ union {
+ long long ll;
+ long l [2];
+ } u;
+ u.ll = 0x12345678;
+ if (u.l[0] == 0x12345678)
+ return 0;
+ return 1;
+}
+],
+ac_cv_have_little_endian_long_long=yes,
+ac_cv_have_little_endian_long_long=no,
+[# Should try to guess here
+ac_cv_have_little_endian_long_long=no
+])])
+AC_MSG_RESULT($ac_cv_have_little_endian_long_long)
+if test "$ac_cv_have_little_endian_long_long" = yes
+then
+ AC_DEFINE(HAVE_LITTLE_ENDIAN_LONG_LONG)
+fi
+])
+
AC_STAT64
AC_SIN6_SCOPE_ID
AC_LONG_LONG
+AC_LITTLE_ENDIAN_LONG_LONG
AC_OFF_T_IS_LONG_LONG
AC_RLIM_T_IS_LONG_LONG
AC_ST_FLAGS
* _h refers to the higher numbered u_arg
*/
-#if 1
-/* This should work, assuming we can do non-aligned 64 bit fetches.
- * if not we'll have to figure out how which of the other versions to use.
- */
-
-#define LONG_LONG(_l,_h) (*(long long *) &(_l))
-
-#else
-
-#if _LITTLE_ENDIAN
+#if HAVE_LITTLE_ENDIAN_LONG_LONG
#define LONG_LONG(_l,_h) \
((long long)((unsigned long long)(_l) | ((unsigned long long)(_h)<<32)))
#else
((long long)((unsigned long long)(_h) | ((unsigned long long)(_l)<<32)))
#endif
#endif
-#endif