فهرست منبع

(update_archive): Remove call to name_expand; had no effect.
Use chdir_do to change into directory.
Use deref_stat instead of stat.
Use add_avoided_name to mark names to be avoided; the old method of
setting a bit with the name caused all descendants of that name to
be avoided, in some circumstances.

Paul Eggert 25 سال پیش
والد
کامیت
e6d8e9279f
1فایلهای تغییر یافته به همراه7 افزوده شده و 9 حذف شده
  1. 7 9
      src/update.c

+ 7 - 9
src/update.c

@@ -1,5 +1,5 @@
 /* Update a tar archive.
 /* Update a tar archive.
-   Copyright (C) 1988, 1992, 1994, 1996, 1997 Free Software Foundation, Inc.
+   Copyright 1988, 1992, 1994, 1996, 1997, 1999 Free Software Foundation, Inc.
 
 
    This program is free software; you can redistribute it and/or modify it
    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
    under the terms of the GNU General Public License as published by the
@@ -108,8 +108,6 @@ update_archive (void)
   int found_end = 0;
   int found_end = 0;
 
 
   name_gather ();
   name_gather ();
-  if (subcommand_option == UPDATE_SUBCOMMAND)
-    name_expand ();
   open_archive (ACCESS_UPDATE);
   open_archive (ACCESS_UPDATE);
 
 
   while (!found_end)
   while (!found_end)
@@ -128,14 +126,14 @@ update_archive (void)
 	    if (subcommand_option == UPDATE_SUBCOMMAND
 	    if (subcommand_option == UPDATE_SUBCOMMAND
 		&& (name = name_scan (current_file_name), name))
 		&& (name = name_scan (current_file_name), name))
 	      {
 	      {
-		struct stat stat_data;
+		struct stat s;
 		enum archive_format unused;
 		enum archive_format unused;
 
 
 		decode_header (current_header, &current_stat, &unused, 0);
 		decode_header (current_header, &current_stat, &unused, 0);
-		if (stat (current_file_name, &stat_data) < 0)
-		  ERROR ((0, errno, _("Cannot stat %s"), current_file_name));
-		else if (current_stat.st_mtime >= stat_data.st_mtime)
-		  name->found = 1;
+		chdir_do (name->change_dir);
+		if (deref_stat (dereference_option, current_file_name, &s) == 0
+		    && s.st_mtime <= current_stat.st_mtime)
+		  add_avoided_name (current_file_name);
 	      }
 	      }
 	    set_next_block_after (current_header);
 	    set_next_block_after (current_header);
 	    if (current_header->oldgnu_header.isextended)
 	    if (current_header->oldgnu_header.isextended)
@@ -194,7 +192,7 @@ update_archive (void)
 	if (subcommand_option == CAT_SUBCOMMAND)
 	if (subcommand_option == CAT_SUBCOMMAND)
 	  append_file (path);
 	  append_file (path);
 	else
 	else
-	  dump_file (path, (dev_t) -1, 1);
+	  dump_file (path, (dev_t) 0, 1);
       }
       }
   }
   }