X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fcreate.c;h=b03c2f227c694df8990bf5cd7545f4eab3840bc7;hb=8e9027857c8dba2d57134a271c76ce2553302d19;hp=ad119832ded67088a11855bbe80efe1e8a20b2f7;hpb=3bbdaea0d231a49d7209ecc490b32b01e4d2e7c7;p=chaz%2Ftar diff --git a/src/create.c b/src/create.c index ad11983..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 @@ -152,7 +149,7 @@ create_archive() open_archive(0); /* Open for writing */ if(f_gnudump) { - char *buf = ck_malloc(NAME_MAX); + char *buf = ck_malloc(PATH_MAX); char *q,*bufp; collect_and_sort_names(); @@ -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; }