X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fmisc.c;h=d263c0785da5503be29f40c02c45bd02e28372f2;hb=15c02c2b9d383446b3ea35dbea5a048e136b020d;hp=e92c8aa830e36fe2fca6cd25aeaf9f107d7b6bac;hpb=45ccda119355a1087450039a250359c1d0de0d08;p=chaz%2Ftar diff --git a/src/misc.c b/src/misc.c index e92c8aa..d263c07 100644 --- a/src/misc.c +++ b/src/misc.c @@ -288,7 +288,8 @@ normalize_filename (int cdidx, const char *name) this following approach may lead to situations where the same file or directory is processed twice under different absolute paths without that duplication being detected. Perhaps we - should use dev+ino pairs instead of names? */ + should use dev+ino pairs instead of names? (See listed03.at for + a related test case.) */ const char *cdpath = tar_getcdpath (cdidx); size_t copylen; bool need_separator; @@ -585,7 +586,12 @@ safer_rmdir (const char *file_name) return -1; } - return unlinkat (chdir_fd, file_name, AT_REMOVEDIR); + if (unlinkat (chdir_fd, file_name, AT_REMOVEDIR) == 0) + { + remove_delayed_set_stat (file_name); + return 0; + } + return -1; } /* Remove FILE_NAME, returning 1 on success. If FILE_NAME is a directory, @@ -1239,7 +1245,7 @@ tar_savedir (const char *name, int must_exist) open_error (name); } else if (! ((dir = fdopendir (fd)) - && (ret = streamsavedir (dir)))) + && (ret = streamsavedir (dir, savedir_sort_order)))) savedir_error (name); if (dir ? closedir (dir) != 0 : 0 <= fd && close (fd) != 0)