Bernhard Voelker wrote:

doesn't coreutils support platforms
where struct dirent lacks a working d_ino?

Yes it does. Thanks for catching that. I installed the attached patches, the first two into gnulib and the last two into coreutils.

Tar needs fixing too, but that'll require a UI change -- Sergey, what do you think?

From 5bdd09b4b5246d852b63455f1d629f38be115bf9 Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Wed, 26 Feb 2014 23:57:26 -0800
Subject: [PATCH 1/2] savedir: new symbol for fast-read version

* lib/savedir.h (SAVEDIR_SORT_FASTREAD): New symbol, for programs
like GNU cp that want to use SAVEDIR_SORT_INODE if available,
SAVEDIR_SORT_NONE otherwise.  Problem reported by Bernhard Voelker in:
http://lists.gnu.org/archive/html/coreutils/2014-02/msg00037.html
---
 ChangeLog     | 8 ++++++++
 lib/savedir.h | 7 +++++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 2b6393f..e938204 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2014-02-26  Paul Eggert  <egg...@cs.ucla.edu>
+
+       savedir: new symbol for fast-read version
+       * lib/savedir.h (SAVEDIR_SORT_FASTREAD): New symbol, for programs
+       like GNU cp that want to use SAVEDIR_SORT_INODE if available,
+       SAVEDIR_SORT_NONE otherwise.  Problem reported by Bernhard Voelker in:
+       http://lists.gnu.org/archive/html/coreutils/2014-02/msg00037.html
+
 2014-02-25  Paul Eggert  <egg...@penguin.cs.ucla.edu>
 
        unistd: port readlink to Mac OS X 10.3.9
diff --git a/lib/savedir.h b/lib/savedir.h
index 73fc98a..aff4ad9 100644
--- a/lib/savedir.h
+++ b/lib/savedir.h
@@ -26,9 +26,12 @@
 enum savedir_option
   {
     SAVEDIR_SORT_NONE,
-    SAVEDIR_SORT_NAME
+    SAVEDIR_SORT_NAME,
 #if D_INO_IN_DIRENT
-    , SAVEDIR_SORT_INODE
+    SAVEDIR_SORT_INODE,
+    SAVEDIR_SORT_FASTREAD = SAVEDIR_SORT_INODE
+#else
+    SAVEDIR_SORT_FASTREAD = SAVEDIR_SORT_NONE
 #endif
   };
 
-- 
1.8.5.3

From e1ae551c70575162d23e9fc926c1404b16f1c712 Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Wed, 26 Feb 2014 23:58:18 -0800
Subject: [PATCH 2/2] * NEWS: Recent changes are not that important.

---
 NEWS | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/NEWS b/NEWS
index 11cb2ff..45d829b 100644
--- a/NEWS
+++ b/NEWS
@@ -3,15 +3,6 @@ Important notes
 
 Date        Modules         Changes
 
-2014-02-23  diffseq         The members too_expensive, lo_minimal and 
hi_minimal
-                            were removed from public structureas, and the
-                            find_minimal argument was removed from diag
-                            and compareseq.
-
-2014-02-11  savedir         The savedir and streamsavedir functions have a
-                            new argument specifying how to sort the result.
-                            The fdsavedir function is removed.
-
 2013-04-24  gettext         If your project uses 'gettextize --intl' it is now
                             your responsibility to put -I$(top_builddir)/intl
                             into the Makefile.am for gnulib.
@@ -41,6 +32,15 @@ User visible incompatible changes
 
 Date        Modules         Changes
 
+2014-02-23  diffseq         The members too_expensive, lo_minimal and 
hi_minimal
+                            were removed from public structureas, and the
+                            find_minimal argument was removed from diag
+                            and compareseq.
+
+2014-02-11  savedir         The savedir and streamsavedir functions have a
+                            new argument specifying how to sort the result.
+                            The fdsavedir function is removed.
+
 2013-05-04  gnulib-tool     CVS checkout of gnulib are no longer supported.
 
 2013-02-08  careadlinkat    This module no longer provides the careadlinkatcwd
-- 
1.8.5.3

From d76d0d12bcbd34758ac5a65d401c4e91c400e0b0 Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Thu, 27 Feb 2014 00:05:44 -0800
Subject: [PATCH 1/2] build: update gnulib submodule to latest

---
 gnulib | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gnulib b/gnulib
index 546ff82..1c6bf3d 160000
--- a/gnulib
+++ b/gnulib
@@ -1 +1 @@
-Subproject commit 546ff8206b4366d46f9d1fcc08030c2a33a085fa
+Subproject commit 1c6bf3d204c0cbd664590bbdc30fdf756d9fdb65
-- 
1.8.5.3

From b3b74044074dcb07c0bf3a239bca9124a8910560 Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Thu, 27 Feb 2014 00:07:14 -0800
Subject: [PATCH 2/2] cp: copy files by inode only if that facility is
 available

* src/copy.c (copy_dir): Use the new SAVEDIR_SORT_FASTREAD, not
SAVEDIR_SORT_INODE.  Problem reported by Bernhard Voelker in:
http://lists.gnu.org/archive/html/coreutils/2014-02/msg00037.html
---
 src/copy.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/copy.c b/src/copy.c
index 7afb801..4998386 100644
--- a/src/copy.c
+++ b/src/copy.c
@@ -598,7 +598,7 @@ copy_dir (char const *src_name_in, char const *dst_name_in, 
bool new_dst,
   struct cp_options non_command_line_options = *x;
   bool ok = true;
 
-  name_space = savedir (src_name_in, SAVEDIR_SORT_INODE);
+  name_space = savedir (src_name_in, SAVEDIR_SORT_FASTREAD);
   if (name_space == NULL)
     {
       /* This diagnostic is a bit vague because savedir can fail in
-- 
1.8.5.3

Reply via email to