ops.cc (last_write_time): Set timespec members explicitly instead of with a braced...
authorJonathan Wakely <jwakely@redhat.com>
Sat, 2 May 2015 09:51:49 +0000 (10:51 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Sat, 2 May 2015 09:51:49 +0000 (10:51 +0100)
* 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

libstdc++-v3/ChangeLog
libstdc++-v3/src/filesystem/ops.cc

index efea855af309f8f1be089342b4d136e7c1f82e56..521ca9cb9dfba6e37aa0b3ad037321c34f899ecd 100644 (file)
@@ -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.
index c7e3960be864a8e3c085433ddcc0174b94247837..aa1ab048c70b0620141b57b64655d5fed1464af1 100644 (file)
@@ -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