X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fupdate.c;h=0f5dadf71e49b5616b985981ccb79b88fd0c40bb;hb=cac45fffc58cc10056c528582ee4b78b8ee175e0;hp=ade42830f1395798c2fb94fba992a221fe806a85;hpb=0c6c288b5360fcdb7f9b5826d05c01ade33253f0;p=chaz%2Ftar diff --git a/src/update.c b/src/update.c index ade4283..0f5dadf 100644 --- a/src/update.c +++ b/src/update.c @@ -137,13 +137,35 @@ update_archive (void) chdir_do (name->change_dir); if (deref_stat (dereference_option, - current_stat_info.file_name, &s) == 0 - && (tar_timespec_cmp (get_stat_mtime (&s), - current_stat_info.mtime) - <= 0)) - add_avoided_name (current_stat_info.file_name); + current_stat_info.file_name, &s) == 0) + { + if (S_ISDIR (s.st_mode)) + { + char *p, *dirp; + dirp = savedir (name->name); + if (!dirp) + savedir_error (name->name); + else + { + namebuf_t nbuf = namebuf_create (name->name); + + for (p = dirp; *p; p += strlen (p) + 1) + addname (namebuf_name (nbuf, p), + 0, false, NULL); + + namebuf_free (nbuf); + free (dirp); + + remname (name); + } + } + else if (tar_timespec_cmp (get_stat_mtime (&s), + current_stat_info.mtime) + <= 0) + remname (name); + } } - + skip_member (); break; }