1 Star 0 Fork 27

zhangy103/zstd

forked from src-openEuler/zstd 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
backport-zstd-1.5.0-patch-1-set-mtime-on-output-files.patch 4.87 KB
一键复制 编辑 原始数据 按行查看 历史
zhangxiao 提交于 2021-11-03 16:33 . add tests - set-mtime-on-output-files
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 = 1;
}
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.h> /* utime */
# else
+# include <utime.h>
# include <fcntl.h> /* AT_FDCWD */
# include <sys/stat.h> /* 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.
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/zhangy103/zstd.git
[email protected]:zhangy103/zstd.git
zhangy103
zstd
zstd
master

搜索帮助