Browse Source

*** empty log message ***

François Pinard 30 năm trước cách đây
mục cha
commit
1f568c6aa2
1 tập tin đã thay đổi với 17 bổ sung8 xóa
  1. 17 8
      src/create.c

+ 17 - 8
src/create.c

@@ -177,12 +177,9 @@ create_archive()
 		free(buf);
 	} else {
 		p = name_next(1);
-		if(!p)
-			dump_file(".", -1, 1);
-		else {
-			do dump_file(p, -1, 1);
-			while (p = name_next(1));
-		}
+		do 
+		  dump_file(p, -1, 1);
+		while (p = name_next(1));
 	}
 
 	write_mangled();
@@ -213,6 +210,7 @@ dump_file (p, curdev, toplevel)
 	char save_linkflag;
 	extern time_t new_time;
 	int critical_error = 0;
+	time_t restore_times[2];
 /*	int sparse_ind = 0;*/
 
 
@@ -239,6 +237,9 @@ badfile:
 		  errors++;
 		return;
 	}
+	
+	restore_times[0] = hstat.st_atime;
+	restore_times[1] = hstat.st_utime;
 
 #ifdef S_ISHIDDEN
 	if (S_ISHIDDEN (hstat.st_mode)) {
@@ -577,6 +578,8 @@ badfile:
 		    if (unlink (p) == -1)
 		      msg_perror ("cannot remove %s", p);
 		  }
+		if (f_atime_preserve)
+		  utime (p, restore_times);
 		return;
 
 		/*
@@ -595,7 +598,9 @@ badfile:
 			save_name=0;
 		if(f>=0)
 			(void)close(f);
-	      return;
+		if (f_atime_preserve)
+		  utime (p, restore_times);
+	        return;
 	}
 
 #ifdef S_ISLNK
@@ -727,6 +732,8 @@ badfile:
 			}
 			if(f_multivol)
 				save_name = 0;
+			if (f_atime_preserve)
+			  utime (p, restore_times);
  			return;
 		}
 
@@ -739,7 +746,7 @@ badfile:
 		 * See if we are crossing from one file system to another,
 		 * and avoid doing so if the user only wants to dump one file system.
 		 */
-		if (f_local_filesys && toplevel && curdev != hstat.st_dev) {
+		if (f_local_filesys && !toplevel && curdev != hstat.st_dev) {
 			if(f_verbose)
 				msg("%s: is on a different filesystem; not dumped",p);
 			return;
@@ -784,6 +791,8 @@ badfile:
 
 		closedir(dirp);
 		free(namebuf);
+		if (f_atime_preserve)
+		  utime (p, restore_times);
 		return;
 	}