]> Dogcows Code - chaz/tar/blobdiff - src/buffer.c
(update_archive): Exclude pathnames if any of their components are excluded.
[chaz/tar] / src / buffer.c
index bdb467cd0e82bb5386216355b1d7f5e7de713779..bd1cfe13ee62753f2d0f1fdd2de45f65d8da0975 100644 (file)
@@ -50,7 +50,7 @@ time_t time ();
 \f
 /* Variables.  */
 
-static tarlong total_written;  /* bytes written on all volumes */
+static tarlong prev_written;   /* bytes written on previous volumes */
 static tarlong bytes_written;  /* bytes written on this volume */
 
 /* FIXME: The following four variables should ideally be static to this
@@ -144,18 +144,11 @@ myfork (void)
 
 #endif /* DEBUG FORK */
 
-void
-init_total_written (void)
-{
-  clear_tarlong (total_written);
-  clear_tarlong (bytes_written);
-}
-
 void
 print_total_written (void)
 {
   fprintf (stderr, _("Total bytes written: "));
-  print_tarlong (total_written, stderr);
+  fprintf (stderr, TARLONG_FORMAT, prev_written + bytes_written);
   fprintf (stderr, "\n");
 }
 
@@ -307,13 +300,10 @@ is_regular_file (const char *name)
 {
   struct stat stbuf;
 
-  if (stat (name, &stbuf) < 0)
-    return 1;
-
-  if (S_ISREG (stbuf.st_mode))
-    return 1;
-
-  return 0;
+  if (stat (name, &stbuf) == 0)
+    return S_ISREG (stbuf.st_mode);
+  else
+    return errno == ENOENT;
 }
 
 static ssize_t
@@ -808,8 +798,7 @@ open_archive (enum access_mode access)
 
       if (backed_up_flag)
        undo_last_backup ();
-      FATAL_ERROR ((0, saved_errno, _("Cannot open %s"),
-                   archive_name_array[0]));
+      FATAL_ERROR ((0, saved_errno, "%s", archive_name_array[0]));
     }
 
 #if !MSDOS
@@ -822,8 +811,9 @@ open_archive (enum access_mode access)
     dev_null_output =
       (strcmp (archive_name_array[0], dev_null) == 0
        || (! _isrmt (archive)
-          && stat (dev_null, &dev_null_stat) == 0
           && S_ISCHR (archive_stat.st_mode)
+          && stat (dev_null, &dev_null_stat) == 0
+          && S_ISCHR (dev_null_stat.st_mode)
           && archive_stat.st_rdev == dev_null_stat.st_rdev));
   }
 
@@ -897,8 +887,7 @@ flush_write (void)
   if (checkpoint_option && !(++checkpoint % 10))
     WARN ((0, 0, _("Write checkpoint %d"), checkpoint));
 
-  if (!zerop_tarlong (tape_length_option)
-      && !lessp_tarlong (bytes_written, tape_length_option))
+  if (tape_length_option && tape_length_option <= bytes_written)
     {
       errno = ENOSPC;          /* FIXME: errno should be read-only */
       status = 0;
@@ -909,11 +898,9 @@ flush_write (void)
     status = write_archive_buffer ();
   if (status != record_size && !multi_volume_option)
     write_error (status);
-  else if (totals_option)
-    add_to_tarlong (total_written, record_size);
 
   if (status > 0)
-    add_to_tarlong (bytes_written, status);
+    bytes_written += status;
 
   if (status == record_size)
     {
@@ -955,7 +942,9 @@ flush_write (void)
   if (!new_volume (ACCESS_WRITE))
     return;
 
-  clear_tarlong (bytes_written);
+  if (totals_option)
+    prev_written += bytes_written;
+  bytes_written = 0;
 
   if (volume_label_option && real_s_name[0])
     {
@@ -1009,10 +998,9 @@ flush_write (void)
   status = write_archive_buffer ();
   if (status != record_size)
     write_error (status);
-  else if (totals_option)
-    add_to_tarlong (total_written, record_size);
 
-  add_to_tarlong (bytes_written, record_size);
+  bytes_written += status;
+
   if (copy_back)
     {
       record_start += copy_back;
This page took 0.021744 seconds and 4 git commands to generate.