mirror of git://sourceware.org/git/glibc.git
support: Add support_path_support_time64_value
It allows to check for support on arbitrary timestamp values.
This commit is contained in:
parent
5b980d4809
commit
6fbc0540de
|
|
@ -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 *,
|
extern ssize_t support_copy_file_range (int, off64_t *, int, off64_t *,
|
||||||
size_t, unsigned int);
|
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). */
|
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. */
|
/* Return true if stat supports nanoseconds resolution. */
|
||||||
extern bool support_stat_nanoseconds (void);
|
extern bool support_stat_nanoseconds (void);
|
||||||
|
|
|
||||||
|
|
@ -36,19 +36,15 @@ utimesat_call (const char *path, const struct __timespec64 tsp[2])
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool
|
bool
|
||||||
support_path_support_time64 (const char *path)
|
support_path_support_time64_value (const char *path, int64_t at, int64_t mt)
|
||||||
{
|
{
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
/* Obtain the original timestamps to restore at the end. */
|
/* Obtain the original timestamps to restore at the end. */
|
||||||
struct statx ostx;
|
struct statx ostx;
|
||||||
TEST_VERIFY_EXIT (statx (AT_FDCWD, path, 0, STATX_BASIC_STATS, &ostx) == 0);
|
TEST_VERIFY_EXIT (statx (AT_FDCWD, path, 0, STATX_BASIC_STATS, &ostx) == 0);
|
||||||
|
|
||||||
const struct __timespec64 tsp[] =
|
const struct __timespec64 tsp[] = { { at, 0 }, { mt, 0 } };
|
||||||
{
|
|
||||||
/* 1s and 2s after y2038 limit. */
|
|
||||||
{ 0x80000001ULL, 0 },
|
|
||||||
{ 0x80000002ULL, 0 }
|
|
||||||
};
|
|
||||||
/* Return is kernel does not support __NR_utimensat_time64. */
|
/* Return is kernel does not support __NR_utimensat_time64. */
|
||||||
if (utimesat_call (path, tsp) == -1)
|
if (utimesat_call (path, tsp) == -1)
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue