]> Dogcows Code - chaz/tar/blobdiff - src/update.c
Fix improper use of 'path' word
[chaz/tar] / src / update.c
index c7e03192c5d9314687d26dcd4f3c4d9d1dac9539..b9987afe2935d4a84253735bcc9bfc335d166eb8 100644 (file)
@@ -1,7 +1,7 @@
 /* Update a tar archive.
 
-   Copyright (C) 1988, 1992, 1994, 1996, 1997, 1999, 2000, 2001, 2003
-   Free Software Foundation, Inc.
+   Copyright (C) 1988, 1992, 1994, 1996, 1997, 1999, 2000, 2001, 2003,
+   2004 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
@@ -32,30 +32,32 @@ extern union block *current_block;
 
 /* We've hit the end of the old stuff, and its time to start writing new
    stuff to the tape.  This involves seeking back one record and
-   re-writing the current record (which has been changed).  */
-int time_to_start_writing;
+   re-writing the current record (which has been changed).
+   FIXME: Either eliminate it or move it to common.h.
+*/
+bool time_to_start_writing;
 
 /* Pointer to where we started to write in the first record we write out.
    This is used if we can't backspace the output and have to null out the
    first part of the record.  */
 char *output_start;
 
-/* Catenate file PATH to the archive without creating a header for it.
+/* Catenate file FILE_NAME to the archive without creating a header for it.
    It had better be a tar file or the archive is screwed.  */
 static void
-append_file (char *path)
+append_file (char *file_name)
 {
-  int handle = open (path, O_RDONLY | O_BINARY);
+  int handle = open (file_name, O_RDONLY | O_BINARY);
   struct stat stat_data;
 
   if (handle < 0)
     {
-      open_error (path);
+      open_error (file_name);
       return;
     }
 
   if (fstat (handle, &stat_data) != 0)
-    stat_error (path);
+    stat_error (file_name);
   else
     {
       off_t bytes_left = stat_data.st_size;
@@ -64,7 +66,7 @@ append_file (char *path)
        {
          union block *start = find_next_block ();
          size_t buffer_size = available_space_after (start);
-         ssize_t status;
+         size_t status;
          char buf[UINTMAX_STRSIZE_BOUND];
 
          if (bytes_left < buffer_size)
@@ -76,15 +78,15 @@ append_file (char *path)
            }
 
          status = safe_read (handle, start->buffer, buffer_size);
-         if (status < 0)
-           read_fatal_details (path, stat_data.st_size - bytes_left,
+         if (status == SAFE_READ_ERROR)
+           read_fatal_details (file_name, stat_data.st_size - bytes_left,
                                buffer_size);
          if (status == 0)
            FATAL_ERROR ((0, 0,
                          ngettext ("%s: File shrank by %s byte",
                                    "%s: File shrank by %s bytes",
                                    bytes_left),
-                         quotearg_colon (path),
+                         quotearg_colon (file_name),
                          STRINGIFY_BIGINT (bytes_left, buf)));
 
          bytes_left -= status;
@@ -94,7 +96,7 @@ append_file (char *path)
     }
 
   if (close (handle) != 0)
-    close_error (path);
+    close_error (file_name);
 }
 
 /* Implement the 'r' (add files to end of archive), and 'u' (add files
@@ -108,6 +110,7 @@ update_archive (void)
 
   name_gather ();
   open_archive (ACCESS_UPDATE);
+  xheader_write_global ();
 
   while (!found_end)
     {
@@ -124,14 +127,15 @@ update_archive (void)
            struct name *name;
 
            if (subcommand_option == UPDATE_SUBCOMMAND
-               && (name = name_scan (current_stat_info.file_name), name))
+               && (name = name_scan (current_stat_info.file_name)) != NULL)
              {
                struct stat s;
                enum archive_format unused;
 
                decode_header (current_header, &current_stat_info, &unused, 0);
                chdir_do (name->change_dir);
-               if (deref_stat (dereference_option, current_stat_info.file_name, &s) == 0
+               if (deref_stat (dereference_option,
+                               current_stat_info.file_name, &s) == 0
                    && s.st_mtime <= current_stat_info.stat.st_mtime)
                  add_avoided_name (current_stat_info.file_name);
              }
@@ -175,22 +179,22 @@ update_archive (void)
     }
 
   reset_eof ();
-  time_to_start_writing = 1;
+  time_to_start_writing = true;
   output_start = current_block->buffer;
 
   {
-    char *path;
+    char *file_name;
 
-    while (path = name_from_list (), path)
+    while ((file_name = name_from_list ()) != NULL)
       {
-       if (excluded_name (path))
+       if (excluded_name (file_name))
          continue;
-       if (interactive_option && !confirm ("add", path))
+       if (interactive_option && !confirm ("add", file_name))
          continue;
        if (subcommand_option == CAT_SUBCOMMAND)
-         append_file (path);
+         append_file (file_name);
        else
-         dump_file (path, 1, (dev_t) 0);
+         dump_file (file_name, 1, (dev_t) 0);
       }
   }
 
This page took 0.029989 seconds and 4 git commands to generate.