[PATCH] erofs-utils: lib: tar: fix garbage ns timestamps
Gao Xiang
hsiangkao at linux.alibaba.com
Sun Jul 14 14:41:19 AEST 2024
Some "#if" directives were used incorrectly.
Fixes: 95d315fd7958 ("erofs-utils: introduce tarerofs")
Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>
---
include/erofs/defs.h | 3 +++
lib/tar.c | 11 +++++------
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/include/erofs/defs.h b/include/erofs/defs.h
index 310a6ab..e462338 100644
--- a/include/erofs/defs.h
+++ b/include/erofs/defs.h
@@ -332,15 +332,18 @@ unsigned long __roundup_pow_of_two(unsigned long n)
#define ST_ATIM_NSEC(stbuf) ((stbuf)->st_atim.tv_nsec)
#define ST_CTIM_NSEC(stbuf) ((stbuf)->st_ctim.tv_nsec)
#define ST_MTIM_NSEC(stbuf) ((stbuf)->st_mtim.tv_nsec)
+#define ST_MTIM_NSEC_SET(stbuf, val) (stbuf)->st_mtim.tv_nsec = (val)
#elif defined(HAVE_STRUCT_STAT_ST_ATIMENSEC)
/* macOS */
#define ST_ATIM_NSEC(stbuf) ((stbuf)->st_atimensec)
#define ST_CTIM_NSEC(stbuf) ((stbuf)->st_ctimensec)
#define ST_MTIM_NSEC(stbuf) ((stbuf)->st_mtimensec)
+#define ST_MTIM_NSEC_SET(stbuf, val) (stbuf)->st_mtimensec = (val)
#else
#define ST_ATIM_NSEC(stbuf) 0
#define ST_CTIM_NSEC(stbuf) 0
#define ST_MTIM_NSEC(stbuf) 0
+#define ST_MTIM_NSEC_SET(stbuf, val) do { } while (0)
#endif
#define __erofs_likely(x) __builtin_expect(!!(x), 1)
diff --git a/lib/tar.c b/lib/tar.c
index cefda37..a9b425e 100644
--- a/lib/tar.c
+++ b/lib/tar.c
@@ -490,9 +490,9 @@ int tarerofs_parse_pax_header(struct erofs_iostream *ios,
ret = -EIO;
goto out;
}
-#if ST_MTIM_NSEC
- ST_MTIM_NSEC(&eh->st) = n;
-#endif
+ ST_MTIM_NSEC_SET(&eh->st, n);
+ } else {
+ ST_MTIM_NSEC_SET(&eh->st, 0);
}
eh->use_mtime = true;
} else if (!strncmp(kv, "size=",
@@ -733,13 +733,12 @@ restart:
if (eh.use_mtime) {
st.st_mtime = eh.st.st_mtime;
-#if ST_MTIM_NSEC
- ST_MTIM_NSEC(&st) = ST_MTIM_NSEC(&eh.st);
-#endif
+ ST_MTIM_NSEC_SET(&st, ST_MTIM_NSEC(&eh.st));
} else {
st.st_mtime = tarerofs_parsenum(th->mtime, sizeof(th->mtime));
if (errno)
goto invalid_tar;
+ ST_MTIM_NSEC_SET(&st, 0);
}
if (th->typeflag <= '7' && !eh.path) {
--
2.43.5
More information about the Linux-erofs
mailing list