tar: simplify birthtime calculations
* src/extract.c (same_birthtime): Remove. (extract_link, apply_delayed_links): Go back to using timestamp_cmp instead of same_birthtime, as this is a bit simpler. This fix relies on an up-to-date gnulib.
This commit is contained in:
@@ -271,15 +271,6 @@ set_mode (char const *file_name,
|
||||
}
|
||||
}
|
||||
|
||||
/* Return true if A and B are the same birthtimes.
|
||||
Unavailable birthtimes, which have negative tv_nsec members,
|
||||
all compare equal to each other. */
|
||||
static bool
|
||||
same_birthtime (struct timespec a, struct timespec b)
|
||||
{
|
||||
return (a.tv_nsec == b.tv_nsec && (a.tv_nsec < 0 || a.tv_sec == b.tv_sec));
|
||||
}
|
||||
|
||||
/* Check time after successfully setting FILE_NAME's time stamp to T. */
|
||||
static void
|
||||
check_time (char const *file_name, struct timespec t)
|
||||
@@ -1146,7 +1137,8 @@ extract_link (char *file_name, int typeflag)
|
||||
if (ds->change_dir == chdir_current
|
||||
&& ds->dev == st1.st_dev
|
||||
&& ds->ino == st1.st_ino
|
||||
&& same_birthtime (ds->birthtime, get_stat_birthtime (&st1)))
|
||||
&& (timespec_cmp (ds->birthtime, get_stat_birthtime (&st1))
|
||||
== 0))
|
||||
{
|
||||
struct string_list *p = xmalloc (offsetof (struct string_list, string)
|
||||
+ strlen (file_name) + 1);
|
||||
@@ -1512,7 +1504,7 @@ apply_delayed_links (void)
|
||||
if (fstatat (chdir_fd, source, &st, AT_SYMLINK_NOFOLLOW) == 0
|
||||
&& st.st_dev == ds->dev
|
||||
&& st.st_ino == ds->ino
|
||||
&& same_birthtime (get_stat_birthtime (&st), ds->birthtime))
|
||||
&& timespec_cmp (get_stat_birthtime (&st), ds->birthtime) == 0)
|
||||
{
|
||||
/* Unlink the placeholder, then create a hard link if possible,
|
||||
a symbolic link otherwise. */
|
||||
|
||||
Reference in New Issue
Block a user