abstract access to highres atime/mtime

This commit is contained in:
Antonio SJ Musumeci
2017-04-06 22:16:17 -04:00
parent 292b850e07
commit 0b2bf17cd7
3 changed files with 72 additions and 8 deletions
+50
View File
@@ -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
+6 -4
View File
@@ -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);
}
+16 -4
View File
@@ -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;
}