aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2015-05-02 10:51:49 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2015-05-02 10:51:49 +0100
commit58f270df2501206548bc691b93d18b3844aef550 (patch)
tree27ef7457837a52d6cefb1efc9294e8242996acae
parent4afeb6fcf5299c8d0192d687c6119e00d4c41dcb (diff)
downloadgcc-58f270df2501206548bc691b93d18b3844aef550.zip
gcc-58f270df2501206548bc691b93d18b3844aef550.tar.gz
gcc-58f270df2501206548bc691b93d18b3844aef550.tar.bz2
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
-rw-r--r--libstdc++-v3/ChangeLog6
-rw-r--r--libstdc++-v3/src/filesystem/ops.cc16
2 files changed, 15 insertions, 7 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index efea855..521ca9c 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -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.
diff --git a/libstdc++-v3/src/filesystem/ops.cc b/libstdc++-v3/src/filesystem/ops.cc
index c7e3960..aa1ab04 100644
--- a/libstdc++-v3/src/filesystem/ops.cc
+++ b/libstdc++-v3/src/filesystem/ops.cc
@@ -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(), &times))
ec.assign(errno, std::generic_category());
else