From: Paul Eggert Date: Tue, 7 Jun 2011 23:07:08 +0000 (-0700) Subject: tar: simplify birthtime calculations X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=49bd102a1b220a0e4ad3e0e75ac0cdd2a5964efa;p=chaz%2Ftar 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. --- diff --git a/src/extract.c b/src/extract.c index ecbde1a..d24f98f 100644 --- a/src/extract.c +++ b/src/extract.c @@ -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. */