Skip to content

Commit

Permalink
Merge pull request trapexit#389 from trapexit/stattime
Browse files Browse the repository at this point in the history
abstract access to highres atime/mtime
  • Loading branch information
trapexit authored Apr 7, 2017
2 parents 292b850 + 0b2bf17 commit ad6062b
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 8 deletions.
50 changes: 50 additions & 0 deletions src/fs_base_stat.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
10 changes: 6 additions & 4 deletions src/fs_base_utime.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
# include "fs_base_utime_generic.hpp"
#endif

#include "fs_base_stat.hpp"

namespace fs
{
static
Expand All @@ -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);
}
Expand All @@ -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);
}
Expand Down
20 changes: 16 additions & 4 deletions src/fs_base_utime_generic.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand All @@ -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;
}
Expand All @@ -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;
Expand All @@ -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;
}
Expand Down

0 comments on commit ad6062b

Please sign in to comment.