diff --git a/0001-set-mtime-on-output-files.patch b/0001-set-mtime-on-output-files.patch new file mode 100644 index 0000000000000000000000000000000000000000..f40ebc2929f3e9026999dcfe28efa674f300f345 --- /dev/null +++ b/0001-set-mtime-on-output-files.patch @@ -0,0 +1,149 @@ +diff -Nur zstd-1.5.0/programs/fileio.c new-zstd-1.5.0/programs/fileio.c +--- zstd-1.5.0/programs/fileio.c 2021-05-14 22:59:34.000000000 +0800 ++++ new-zstd-1.5.0/programs/fileio.c 2021-10-25 10:30:36.546222652 +0800 +@@ -1638,6 +1638,7 @@ + int closeDstFile = 0; + int result; + stat_t statbuf; ++ int transferMTime = 0; + assert(ress.srcFile != NULL); + if (ress.dstFile == NULL) { + int dstFilePermissions = DEFAULT_FILE_PERMISSIONS; +@@ -1645,6 +1646,7 @@ + && UTIL_stat(srcFileName, &statbuf) + && UTIL_isRegularFileStat(&statbuf) ) { + dstFilePermissions = statbuf.st_mode; ++ transferMTime = 0; + } + + closeDstFile = 1; +@@ -1671,6 +1673,12 @@ + DISPLAYLEVEL(1, "zstd: %s: %s \n", dstFileName, strerror(errno)); + result=1; + } ++ ++ if (transferMTime) { ++ UTIL_utime(dstFileName, &statbuf); ++ } ++ ++ + if ( (result != 0) /* operation failure */ + && strcmp(dstFileName, stdoutmark) /* special case : don't remove() stdout */ + ) { +@@ -2537,6 +2545,7 @@ + int result; + stat_t statbuf; + int releaseDstFile = 0; ++ int transferMTime = 0; + + if ((ress.dstFile == NULL) && (prefs->testMode==0)) { + int dstFilePermissions = DEFAULT_FILE_PERMISSIONS; +@@ -2544,6 +2553,7 @@ + && UTIL_stat(srcFileName, &statbuf) + && UTIL_isRegularFileStat(&statbuf) ) { + dstFilePermissions = statbuf.st_mode; ++ transferMTime = 1; + } + + releaseDstFile = 1; +@@ -2568,7 +2578,9 @@ + DISPLAYLEVEL(1, "zstd: %s: %s \n", dstFileName, strerror(errno)); + result = 1; + } +- ++ if (transferMTime) { ++ UTIL_utime(dstFileName, &statbuf); ++ } + if ( (result != 0) /* operation failure */ + && strcmp(dstFileName, stdoutmark) /* special case : don't remove() stdout */ + ) { +diff -Nur zstd-1.5.0/programs/util.c new-zstd-1.5.0/programs/util.c +--- zstd-1.5.0/programs/util.c 2021-05-14 22:59:34.000000000 +0800 ++++ new-zstd-1.5.0/programs/util.c 2021-10-25 10:30:43.246350653 +0800 +@@ -31,6 +31,7 @@ + # if PLATFORM_POSIX_VERSION < 200809L || !defined(st_mtime) + # include /* utime */ + # else ++# include + # include /* AT_FDCWD */ + # include /* utimensat */ + # endif +@@ -159,6 +160,31 @@ + return chmod(filename, permissions); + } + ++/*set access and modification times */ ++int UTIL_utime(const char* filename, const stat_t *statbuf) ++{ ++ int ret; ++ /* We check that st_mtime is a macro here in order to give us confidence ++ * that struct stat has a struct timespec st_mtim member. We need this ++ * check because there are some platforms that claim to be POSIX 2008 ++ * compliant but which do not have st_mtim... ++ * */ ++#if (PLATFORM_POSIX_VERSION >= 200809L) && defined(st_time) ++ /* (atime, mtime)*/ ++ struct timespec timebuf[2] = { {0, UTIME_NOW} }; ++ timebuf[1] = statbuf->st_mtim; ++ ret = utimensat(AT_FDCWD, filename, timebuf, 0); ++#else ++ struct utimbuf timebuf; ++ timebuf.actime = time(NULL); ++ timebuf.modtime = statbuf->st_mtime; ++ ret = utime(filename, &timebuf); ++#endif ++ errno = 0; ++ return ret; ++} ++ ++ + int UTIL_setFileStat(const char *filename, const stat_t *statbuf) + { + int res = 0; +@@ -168,25 +194,7 @@ + return -1; + + /* set access and modification times */ +- /* We check that st_mtime is a macro here in order to give us confidence +- * that struct stat has a struct timespec st_mtim member. We need this +- * check because there are some platforms that claim to be POSIX 2008 +- * compliant but which do not have st_mtim... */ +-#if (PLATFORM_POSIX_VERSION >= 200809L) && defined(st_mtime) +- { +- /* (atime, mtime) */ +- struct timespec timebuf[2] = { {0, UTIME_NOW} }; +- timebuf[1] = statbuf->st_mtim; +- res += utimensat(AT_FDCWD, filename, timebuf, 0); +- } +-#else +- { +- struct utimbuf timebuf; +- timebuf.actime = time(NULL); +- timebuf.modtime = statbuf->st_mtime; +- res += utime(filename, &timebuf); +- } +-#endif ++ res += UTIL_utime(filename, statbuf); + + #if !defined(_WIN32) + res += chown(filename, statbuf->st_uid, statbuf->st_gid); /* Copy ownership */ +diff -Nur zstd-1.5.0/programs/util.h new-zstd-1.5.0/programs/util.h +--- zstd-1.5.0/programs/util.h 2021-05-14 22:59:34.000000000 +0800 ++++ new-zstd-1.5.0/programs/util.h 2021-10-25 10:30:43.246350653 +0800 +@@ -135,6 +135,16 @@ + */ + int UTIL_setFileStat(const char* filename, const stat_t* statbuf); + ++/** ++ * Set atime to now and mtime to the st_mtim in statbuf. ++ * ++ * Directly wraps utime() or utimensat(). Returns -1 on error. ++ * Does not validate filename is valid. ++ * */ ++int UTIL_utime(const char* filename, const stat_t *statbuf); ++ ++ ++ + /* + * These helpers operate on a pre-populated stat_t, i.e., the result of + * calling one of the above functions. diff --git a/zstd-1.5.0.tar.gz b/zstd-1.5.0.tar.gz index d94e9167be8b49c9ce420fec3f98cae32616a3f6..a491b2116d63bca87c95870e26da5e6eaed79c31 100644 Binary files a/zstd-1.5.0.tar.gz and b/zstd-1.5.0.tar.gz differ diff --git a/zstd.spec b/zstd.spec index 24515a7f3faff577a2bde3b330c8151aab3a69bd..8acfcedbb9f5bbf6384bbaba42ec32ae7461e808 100644 --- a/zstd.spec +++ b/zstd.spec @@ -8,6 +8,7 @@ License: BSD and GPLv2 URL: https://github.com/facebook/zstd Source0: https://github.com/facebook/zstd/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz +Patch1 0001-set-mtime-on-output-files.patch BuildRequires: gtest-devel gcc-c++ pkg-config Provides: libzstd @@ -87,6 +88,9 @@ install -D -m644 programs/zstd.1 %{buildroot}%{_mandir}/man1/pzstd.1 %{_mandir}/man1/*.1* %changelog +* Mon Oct 25 2021 zhangxiao - 1.5.0-2 +* fix modification time is set to the compression time + * Wed Aug 04 2021 shixuantong - 1.5.0-1 - upgrade version to 1.5.0