]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
unzip: fix multi-platform handling of stat mtime
authorMartin Matuska <martin@matuska.de>
Fri, 14 Jul 2023 10:33:26 +0000 (12:33 +0200)
committerMartin Matuska <martin.matuska@axelspringer.com>
Fri, 14 Jul 2023 10:36:03 +0000 (12:36 +0200)
unzip/bsdunzip.c

index 319e7eaa69ba85ea3f45bfcea14ba503a48dc113..d75ca490f066184993d2b0e126337fe062a21910 100644 (file)
@@ -635,10 +635,27 @@ recheck:
        if (lstat(*path, &sb) == 0) {
                if (u_opt || f_opt) {
                        /* check if up-to-date */
-                       if (S_ISREG(sb.st_mode) &&
-                           (sb.st_mtim.tv_sec > mtime.tv_sec ||
+                       if (S_ISREG(sb.st_mode) && (
+#if HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC
+                           sb.st_mtimespec.tv_sec > mtime.tv_sec ||
+                           (sb.st_mtimespec.tv_sec == mtime.tv_sec &&
+                           sb.st_mtimespec.tv_nsec >= mtime.tv_nsec)
+#elif HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
+                           sb.st_mtim.tv_sec > mtime.tv_sec ||
                            (sb.st_mtim.tv_sec == mtime.tv_sec &&
-                           sb.st_mtim.tv_nsec >= mtime.tv_nsec)))
+                           sb.st_mtim.tv_nsec >= mtime.tv_nsec)
+#elif HAVE_STRUCT_STAT_ST_MTIME_N
+                           sb.st_mtime > mtime.tv_sec ||
+                           (sb.st_mtime == mtime.tv_sec &&
+                           sb.st_mtime_n => mtime.tv_nsec)
+#elif HAVE_STRUCT_STAT_ST_MTIME_USEC
+                           sb.st_mtime > mtime.tv_sec ||
+                           (sb.st_mtime == mtime.tv_sec &&
+                           sb.st_mtime_usec * 1000 => mtime.tv_nsec)
+#else
+                           sb.st_mtime > mtime.tv_sec
+#endif
+                           ))
                                return;
                        (void)unlink(*path);
                } else if (o_opt) {