Tom G. Christensen wrote:
This broke the build on CentOS 6 since it has glibc 2.12 which is from before the introduction of the internal __fsword_t type.

Thanks for reporting that. I reproduced the problem on a nearby old server and fixed it by installing the attached patch.
>From 356f06d605b2f13bedc5359ea1fda66bed710559 Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Thu, 10 Aug 2017 06:06:06 -0700
Subject: [PATCH] fts: port recent changes to CentOS 6

Problem reported by Tom G. Christensen in:
http://lists.gnu.org/archive/html/bug-gnulib/2017-08/msg00064.html
* lib/fts.c (fsword): New type.
(struct dev_type, filesystem_type): Use it.
* m4/fts.m4 (gl_FUNC_FTS_CORE): Check for __fsword_t.
Also, check for f_type only if fstatfs and sys/vfs.h work.
---
 ChangeLog | 10 ++++++++++
 lib/fts.c | 10 ++++++++--
 m4/fts.m4 | 17 +++++++++++++----
 3 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 92113de..9f8dca5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2017-08-10  Paul Eggert  <egg...@cs.ucla.edu>
+
+	fts: port recent changes to CentOS 6
+	Problem reported by Tom G. Christensen in:
+	http://lists.gnu.org/archive/html/bug-gnulib/2017-08/msg00064.html
+	* lib/fts.c (fsword): New type.
+	(struct dev_type, filesystem_type): Use it.
+	* m4/fts.m4 (gl_FUNC_FTS_CORE): Check for __fsword_t.
+	Also, check for f_type only if fstatfs and sys/vfs.h work.
+
 2017-08-09  Paul Eggert  <egg...@cs.ucla.edu>
 
 	tempname: do not depend on secure_getenv
diff --git a/lib/fts.c b/lib/fts.c
index a870054..bf8edf8 100644
--- a/lib/fts.c
+++ b/lib/fts.c
@@ -699,11 +699,17 @@ enum leaf_optimization
 # define S_MAGIC_TMPFS 0x1021994
 # define S_MAGIC_XFS 0x58465342
 
+# ifdef HAVE___FSWORD_T
+typedef __fsword_t fsword;
+# else
+typedef long int fsword;
+# endif
+
 /* Map a stat.st_dev number to a file system type number f_ftype.  */
 struct dev_type
 {
   dev_t st_dev;
-  __fsword_t f_type;
+  fsword f_type;
 };
 
 /* Use a tiny initial size.  If a traversal encounters more than
@@ -730,7 +736,7 @@ dev_type_compare (void const *x, void const *y)
 /* Return the file system type of P, or 0 if not known.
    Try to cache known values.  */
 
-static __fsword_t
+static fsword
 filesystem_type (FTSENT const *p)
 {
   FTS *sp = p->fts_fts;
diff --git a/m4/fts.m4 b/m4/fts.m4
index 123fcba..639f6b8 100644
--- a/m4/fts.m4
+++ b/m4/fts.m4
@@ -1,4 +1,4 @@
-#serial 20
+#serial 21
 dnl Copyright (C) 2005-2017 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -16,7 +16,16 @@ AC_DEFUN([gl_FUNC_FTS_CORE],
 
   AC_CHECK_FUNCS_ONCE([fstatfs])
   AC_CHECK_HEADERS_ONCE([sys/param.h sys/vfs.h])dnl
-  AC_CHECK_MEMBERS([struct statfs.f_type],,,
-    [$ac_includes_default
-     #include <sys/vfs.h>])
+  if test "$ac_cv_func_fstatfs,$ac_cv_header_sys_vfs_h" = yes,yes; then
+    AC_CHECK_MEMBERS([struct statfs.f_type], [], [],
+      [[$ac_includes_default
+        #include <sys/vfs.h>
+      ]])
+    if test "$ac_cv_member_struct_statfs_f_type" = yes; then
+      AC_CHECK_TYPES([__fsword_t], [], [],
+        [[$ac_includes_default
+          #include <sys/vfs.h>
+        ]])
+    fi
+  fi
 ])
-- 
2.7.4

Reply via email to