X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fcreate.c;h=b03c2f227c694df8990bf5cd7545f4eab3840bc7;hb=8e9027857c8dba2d57134a271c76ce2553302d19;hp=5d09f35ed15baf22695f86d9013265e48b511052;hpb=40836b8e8901b1ccb9396bc66dc9e5f91cec8cca;p=chaz%2Ftar diff --git a/src/create.c b/src/create.c index 5d09f35..b03c2f2 100644 --- a/src/create.c +++ b/src/create.c @@ -91,8 +91,6 @@ extern struct name *gnu_list_name; extern void print_header(); union record *start_header(); -void add_mangle(); -void add_symlink_mangle(); void blank_name_list(); int check_exclude(); PTR ck_malloc(); @@ -115,7 +113,6 @@ void to_oct(); void dump_file(); void write_dir_file(); void write_eot(); -void write_mangled(); int zero_record(); /* This code moved from tar.h since create.c is the only file that cares @@ -177,15 +174,11 @@ 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(); write_eot(); close_archive(); if(f_gnudump) @@ -213,6 +206,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 +233,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 +574,8 @@ badfile: if (unlink (p) == -1) msg_perror ("cannot remove %s", p); } + if (f_atime_preserve) + utime (p, restore_times); return; /* @@ -595,7 +594,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 +728,8 @@ badfile: } if(f_multivol) save_name = 0; + if (f_atime_preserve) + utime (p, restore_times); return; } @@ -739,7 +742,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 +787,8 @@ badfile: closedir(dirp); free(namebuf); + if (f_atime_preserve) + utime (p, restore_times); return; }