]> Dogcows Code - chaz/tar/blobdiff - src/create.c
(dump_file): Do not diagnose a file that the parent directory
[chaz/tar] / src / create.c
index b04b3a81bd24ce1ad9a6e898e8f5b19bf5d36bf6..9c3f5ffe82098afec83b03191ee20654618ef9c5 100644 (file)
@@ -924,7 +924,7 @@ create_archive (void)
 /* Dump a single file, recursing on directories.  P is the file name
    to dump.  TOP_LEVEL tells whether this is a top-level call; zero
    means no, positive means yes, and negative means an incremental
-   dump where it's irrelevant.  PARENT_DEVICE is the device of P's
+   dump.  PARENT_DEVICE is the device of P's
    parent directory; it is examined only if TOP_LEVEL is zero.
 
    Set global CURRENT_STAT to stat output for this file.  */
@@ -1140,7 +1140,7 @@ dump_file (char *p, int top_level, dev_t parent_device)
 
       /* Now output all the files in the directory.  */
 
-      errno = 0;               /* FIXME: errno should be read-only */
+      errno = 0;
 
       directory = opendir (p);
       if (!directory)
@@ -1363,9 +1363,16 @@ dump_file (char *p, int top_level, dev_t parent_device)
              f = open (p, O_RDONLY | O_BINARY);
              if (f < 0)
                {
-                 WARN ((0, errno, _("Cannot add file %s"), p));
-                 if (!ignore_failed_read_option)
-                   exit_status = TAREXIT_FAILURE;
+                 /* Do not diagnose a file that the parent directory
+                    said should be there, but is absent.  It was
+                    probably removed between then and now.  */
+                 if (top_level || errno != ENOENT)
+                   {
+                     WARN ((0, errno, _("Cannot add file %s"), p));
+                     if (! ignore_failed_read_option)
+                       exit_status = TAREXIT_FAILURE;
+                   }
+
                  return;
                }
            }
@@ -1480,7 +1487,7 @@ dump_file (char *p, int top_level, dev_t parent_device)
                ERROR ((0, errno, "%s: fstat", p));
              else if (final_stat.st_mtime != restore_times.modtime
                       || final_stat.st_size != restore_size)
-               ERROR ((0, errno, _("%s: file changed as we read it"), p));
+               ERROR ((0, 0, _("%s: file changed as we read it"), p));
              if (close (f) != 0)
                ERROR ((0, errno, _("%s: close"), p));
              if (atime_preserve_option)
This page took 0.023535 seconds and 4 git commands to generate.