diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-03-19 13:44:20 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2021-03-29 10:22:13 -0300 |
commit | 6fbc0540de8ecf8ecdf36925769797a0e9dfea4b (patch) | |
tree | 42ca6102299e35b3c5b7e1fea92b1fc5d2773981 /support | |
parent | 5b980d4809913088729982865188b754939bcd39 (diff) | |
download | glibc-6fbc0540de8ecf8ecdf36925769797a0e9dfea4b.tar.gz glibc-6fbc0540de8ecf8ecdf36925769797a0e9dfea4b.tar.xz glibc-6fbc0540de8ecf8ecdf36925769797a0e9dfea4b.zip |
support: Add support_path_support_time64_value
It allows to check for support on arbitrary timestamp values.
Diffstat (limited to 'support')
-rw-r--r-- | support/support.h | 11 | ||||
-rw-r--r-- | support/support_path_support_time64.c | 10 |
2 files changed, 12 insertions, 9 deletions
diff --git a/support/support.h b/support/support.h index 90f3ff9d1a..b0352726bf 100644 --- a/support/support.h +++ b/support/support.h @@ -130,9 +130,16 @@ extern void support_copy_file (const char *from, const char *to); extern ssize_t support_copy_file_range (int, off64_t *, int, off64_t *, size_t, unsigned int); -/* Return true is PATH supports 64-bit time_t interfaces for file +/* Return true if PATH supports 64-bit time_t interfaces for file operations (such as fstatat or utimensat). */ -extern bool support_path_support_time64 (const char *path); +extern bool support_path_support_time64_value (const char *path, int64_t at, + int64_t mt); +static __inline bool support_path_support_time64 (const char *path) +{ + /* 1s and 2s after y2038 limit. */ + return support_path_support_time64_value (path, 0x80000001ULL, + 0x80000002ULL); +} /* Return true if stat supports nanoseconds resolution. */ extern bool support_stat_nanoseconds (void); diff --git a/support/support_path_support_time64.c b/support/support_path_support_time64.c index 452fedcde5..33b2bdff66 100644 --- a/support/support_path_support_time64.c +++ b/support/support_path_support_time64.c @@ -36,19 +36,15 @@ utimesat_call (const char *path, const struct __timespec64 tsp[2]) #endif bool -support_path_support_time64 (const char *path) +support_path_support_time64_value (const char *path, int64_t at, int64_t mt) { #ifdef __linux__ /* Obtain the original timestamps to restore at the end. */ struct statx ostx; TEST_VERIFY_EXIT (statx (AT_FDCWD, path, 0, STATX_BASIC_STATS, &ostx) == 0); - const struct __timespec64 tsp[] = - { - /* 1s and 2s after y2038 limit. */ - { 0x80000001ULL, 0 }, - { 0x80000002ULL, 0 } - }; + const struct __timespec64 tsp[] = { { at, 0 }, { mt, 0 } }; + /* Return is kernel does not support __NR_utimensat_time64. */ if (utimesat_call (path, tsp) == -1) return false; |