mirror of
https://github.com/trapexit/mergerfs.git
synced 2026-10-21 08:31:35 +00:00
abstract access to highres atime/mtime
This commit is contained in:
@@ -62,6 +62,56 @@ namespace fs
|
||||
{
|
||||
return ::fstat(fd,&st);
|
||||
}
|
||||
|
||||
static
|
||||
inline
|
||||
timespec *
|
||||
stat_atime(struct stat &st)
|
||||
{
|
||||
#if __APPLE__
|
||||
return &st.st_atimespec;
|
||||
#else
|
||||
return &st.st_atim;
|
||||
#endif
|
||||
}
|
||||
|
||||
static
|
||||
inline
|
||||
const
|
||||
timespec *
|
||||
stat_atime(const struct stat &st)
|
||||
{
|
||||
#if __APPLE__
|
||||
return &st.st_atimespec;
|
||||
#else
|
||||
return &st.st_atim;
|
||||
#endif
|
||||
}
|
||||
|
||||
static
|
||||
inline
|
||||
timespec *
|
||||
stat_mtime(struct stat &st)
|
||||
{
|
||||
#if __APPLE__
|
||||
return &st.st_mtimespec;
|
||||
#else
|
||||
return &st.st_mtim;
|
||||
#endif
|
||||
}
|
||||
|
||||
static
|
||||
inline
|
||||
const
|
||||
timespec *
|
||||
stat_mtime(const struct stat &st)
|
||||
{
|
||||
#if __APPLE__
|
||||
return &st.st_mtimespec;
|
||||
#else
|
||||
return &st.st_mtim;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
# include "fs_base_utime_generic.hpp"
|
||||
#endif
|
||||
|
||||
#include "fs_base_stat.hpp"
|
||||
|
||||
namespace fs
|
||||
{
|
||||
static
|
||||
@@ -35,8 +37,8 @@ namespace fs
|
||||
{
|
||||
struct timespec times[2];
|
||||
|
||||
times[0] = st.st_atim;
|
||||
times[1] = st.st_mtim;
|
||||
times[0] = *fs::stat_atime(st);
|
||||
times[1] = *fs::stat_mtime(st);
|
||||
|
||||
return fs::utime(AT_FDCWD,path,times,0);
|
||||
}
|
||||
@@ -49,8 +51,8 @@ namespace fs
|
||||
{
|
||||
struct timespec times[2];
|
||||
|
||||
times[0] = st.st_atim;
|
||||
times[1] = st.st_mtim;
|
||||
times[0] = *fs::stat_atime(st);
|
||||
times[1] = *fs::stat_mtime(st);
|
||||
|
||||
return fs::utime(fd,times);
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include "fs_base_stat.hpp"
|
||||
|
||||
#ifndef UTIME_NOW
|
||||
# define UTIME_NOW ((1l << 30) - 1l)
|
||||
#endif
|
||||
@@ -123,6 +125,8 @@ _set_utime_omit_to_current_value(const int dirfd,
|
||||
{
|
||||
int rv;
|
||||
struct stat st;
|
||||
timespec *atime;
|
||||
timespec *mtime;
|
||||
|
||||
if(!_any_timespec_is_utime_omit(ts))
|
||||
return 0;
|
||||
@@ -131,10 +135,13 @@ _set_utime_omit_to_current_value(const int dirfd,
|
||||
if(rv == -1)
|
||||
return -1;
|
||||
|
||||
atime = fs::stat_atime(st);
|
||||
mtime = fs::stat_mtime(st);
|
||||
|
||||
if(ts[0].tv_nsec == UTIME_OMIT)
|
||||
TIMESPEC_TO_TIMEVAL(&tv[0],&st.st_atim);
|
||||
TIMESPEC_TO_TIMEVAL(&tv[0],atime);
|
||||
if(ts[1].tv_nsec == UTIME_OMIT)
|
||||
TIMESPEC_TO_TIMEVAL(&tv[1],&st.st_mtim);
|
||||
TIMESPEC_TO_TIMEVAL(&tv[1],mtime);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -148,6 +155,8 @@ _set_utime_omit_to_current_value(const int fd,
|
||||
{
|
||||
int rv;
|
||||
struct stat st;
|
||||
timespec *atime;
|
||||
timespec *mtime;
|
||||
|
||||
if(!_any_timespec_is_utime_omit(ts))
|
||||
return 0;
|
||||
@@ -156,10 +165,13 @@ _set_utime_omit_to_current_value(const int fd,
|
||||
if(rv == -1)
|
||||
return -1;
|
||||
|
||||
atime = fs::stat_atime(st);
|
||||
mtime = fs::stat_mtime(st);
|
||||
|
||||
if(ts[0].tv_nsec == UTIME_OMIT)
|
||||
TIMESPEC_TO_TIMEVAL(&tv[0],&st.st_atim);
|
||||
TIMESPEC_TO_TIMEVAL(&tv[0],atime;
|
||||
if(ts[1].tv_nsec == UTIME_OMIT)
|
||||
TIMESPEC_TO_TIMEVAL(&tv[1],&st.st_mtim);
|
||||
TIMESPEC_TO_TIMEVAL(&tv[1],mtime);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user