ops.cc (last_write_time): Set timespec members explicitly instead of with a braced-init-list.
* src/filesystem/ops.cc (last_write_time) [_GLIBCXX_USE_UTIMENSAT]: Set timespec members explicitly instead of with a braced-init-list. [_GLIBCXX_HAVE_UTIME_H]: Use lambda to handle st_atime being a macro. From-SVN: r222718
This commit is contained in:
parent
4afeb6fcf5
commit
58f270df25
@ -1,3 +1,9 @@
|
||||
2015-05-02 Jonathan Wakely <jwakely@redhat.com>
|
||||
|
||||
* src/filesystem/ops.cc (last_write_time) [_GLIBCXX_USE_UTIMENSAT]:
|
||||
Set timespec members explicitly instead of with a braced-init-list.
|
||||
[_GLIBCXX_HAVE_UTIME_H]: Use lambda to handle st_atime being a macro.
|
||||
|
||||
2015-05-02 Edward Smith-Rowland <3dw4rd@verizon.net>
|
||||
|
||||
* include/experimental/deque: Add feature-test macro.
|
||||
|
@ -871,20 +871,22 @@ fs::last_write_time(const path& p __attribute__((__unused__)),
|
||||
{
|
||||
auto d = new_time.time_since_epoch();
|
||||
auto s = chrono::duration_cast<chrono::seconds>(d);
|
||||
#if _GLIBCXX_USE_UTIMENSAT
|
||||
auto ns = chrono::duration_cast<chrono::nanoseconds>(d - s);
|
||||
#ifdef _GLIBCXX_USE_UTIMENSAT
|
||||
struct ::timespec ts[2] = {
|
||||
{ 0, UTIME_OMIT },
|
||||
{ static_cast<std::time_t>(s.count()), static_cast<long>(ns.count()) }
|
||||
};
|
||||
if (utimensat(AT_FDCWD, p.c_str(), ts, 0))
|
||||
struct ::timespec ts[2];
|
||||
ts[0].tv_sec = 0;
|
||||
ts[0].tv_nsec = UTIME_OMIT;
|
||||
ts[1].tv_sec = static_cast<std::time_t>(s.count());
|
||||
ts[1].tv_nsec = static_cast<long>(ns.count());
|
||||
if (::utimensat(AT_FDCWD, p.c_str(), ts, 0))
|
||||
ec.assign(errno, std::generic_category());
|
||||
else
|
||||
ec.clear();
|
||||
#elif _GLIBCXX_HAVE_UTIME_H
|
||||
::utimbuf times;
|
||||
times.modtime = s.count();
|
||||
times.actime = do_stat(p, ec, std::mem_fn(&stat::st_atime), times.modtime);
|
||||
times.actime = do_stat(p, ec, [](const auto& st) { return st.st_atime; },
|
||||
times.modtime);
|
||||
if (::utime(p.c_str(), ×))
|
||||
ec.assign(errno, std::generic_category());
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user