mirror of
https://github.com/trapexit/mergerfs.git
synced 2026-10-26 19:01:56 -04:00
abstract access to highres atime/mtime
This commit is contained in:
parent
292b850e07
commit
0b2bf17cd7
3 changed files with 72 additions and 8 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue