- (dtucker) [configure.ac defines.h] Bug #1607: handle the case where fsid_t
   is a struct with a __val member.  Fixes build on, eg, Redhat 6.2.
diff --git a/ChangeLog b/ChangeLog
index 79dc377..82d5c20 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+20090616
+ - (dtucker) [configure.ac defines.h] Bug #1607: handle the case where fsid_t
+   is a struct with a __val member.  Fixes build on, eg, Redhat 6.2.
+
 20090504
  - (dtucker) [sshlogin.c] Move the NO_SSH_LASTLOG #ifndef line to include
    variable declarations.  Should prevent unused warnings anywhere it's set
diff --git a/configure.ac b/configure.ac
index 835c8fa..140c628 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-# $Id: configure.ac,v 1.419 2009/03/18 18:25:02 tim Exp $
+# $Id: configure.ac,v 1.420 2009/06/16 06:11:02 dtucker Exp $
 #
 # Copyright (c) 1999-2004 Damien Miller
 #
@@ -15,7 +15,7 @@
 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 AC_INIT(OpenSSH, Portable, openssh-unix-dev@mindrot.org)
-AC_REVISION($Revision: 1.419 $)
+AC_REVISION($Revision: 1.420 $)
 AC_CONFIG_SRCDIR([ssh.c])
 
 AC_CONFIG_HEADER(config.h)
@@ -3080,15 +3080,41 @@
 		file descriptor passing])
 fi
 
-AC_MSG_CHECKING(if f_fsid has val members)
+AC_MSG_CHECKING(if struct statvfs.f_fsid is integral type)
 AC_TRY_COMPILE([
 #include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_SYS_TIME_H
+# include <sys/time.h>
+#endif
+#ifdef HAVE_SYS_MOUNT_H
+#include <sys/mount.h>
+#endif
+#ifdef HAVE_SYS_STATVFS_H
+#include <sys/statvfs.h>
+#endif
+], [struct statvfs s; s.f_fsid = 0;],
+[ AC_MSG_RESULT(yes) ],
+[ AC_MSG_RESULT(no)
+
+	AC_MSG_CHECKING(if fsid_t has member val)
+	AC_TRY_COMPILE([
+#include <sys/types.h>
 #include <sys/statvfs.h>],
-[struct fsid_t t; t.val[0] = 0;],
+	[fsid_t t; t.val[0] = 0;],
 	[ AC_MSG_RESULT(yes)
-	  AC_DEFINE(FSID_HAS_VAL, 1, f_fsid has members) ],
-	[ AC_MSG_RESULT(no) ]
-)
+	  AC_DEFINE(FSID_HAS_VAL, 1, fsid_t has member val) ],
+	[ AC_MSG_RESULT(no) ])
+
+	AC_MSG_CHECKING(if f_fsid has member __val)
+	AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <sys/statvfs.h>],
+	[fsid_t t; t.__val[0] = 0;],
+	[ AC_MSG_RESULT(yes)
+	  AC_DEFINE(FSID_HAS___VAL, 1, fsid_t has member __val) ],
+	[ AC_MSG_RESULT(no) ])
+])
 
 AC_CACHE_CHECK([for msg_control field in struct msghdr],
 		ac_cv_have_control_in_msghdr, [
diff --git a/defines.h b/defines.h
index 457b6a3..2ccded2 100644
--- a/defines.h
+++ b/defines.h
@@ -25,7 +25,7 @@
 #ifndef _DEFINES_H
 #define _DEFINES_H
 
-/* $Id: defines.h,v 1.154 2009/03/07 01:32:22 dtucker Exp $ */
+/* $Id: defines.h,v 1.155 2009/06/16 06:11:02 dtucker Exp $ */
 
 
 /* Constants */
@@ -594,6 +594,10 @@
 #define FSID_TO_ULONG(f) \
 	((((u_int64_t)(f).val[0] & 0xffffffffUL) << 32) | \
 	    ((f).val[1] & 0xffffffffUL))
+#elif defined(FSID_HAS___VAL)
+#define FSID_TO_ULONG(f) \
+	((((u_int64_t)(f).__val[0] & 0xffffffffUL) << 32) | \
+	    ((f).__val[1] & 0xffffffffUL))
 #else
 # define FSID_TO_ULONG(f) ((f))
 #endif