[libcxx-commits] [PATCH] D91142: [10/N] [libcxx] Implement _FilesystemClock::now() and __last_write_time for windows

Martin Storsjö via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Fri Nov 20 00:05:45 PST 2020


mstorsjo added inline comments.


================
Comment at: libcxx/src/filesystem/operations.cpp:399
 #if defined(_LIBCPP_WIN32API)
 
 #define FILE_TIME_OFFSET_SECS (uint64_t(369 * 365 + 89) * (24 * 60 * 60))
----------------
amccarth wrote:
> Just a suggestion to give those magic values some context.
Good point, will apply that.


================
Comment at: libcxx/src/filesystem/operations.cpp:1227
+  if (!fs_time::convert_to_timespec(ts, new_time) ||
+      new_time == file_time_type::min())
+    return err.report(errc::value_too_large);
----------------
amccarth wrote:
> It's not clear to me why this checks `new_time == file_time_type::min()`.  It looks like convert_to_timespec returns false if the new time is not representable.  In what case would new_time be min?  And why would we then say the value is too large?
This is mostly a workaround to get this test working, when the filesystem time type isn't int128_t: https://github.com/llvm/llvm-project/blob/master/libcxx/test/std/input.output/filesystems/fs.op.funcs/fs.op.last_write_time/last_write_time.pass.cpp#L507-L540

But that test also relies on the test being able to guess what time values are reprepsentable and what aren't, and that doesn't really match what the implementation does anyway, so I guess I could just skip that testcase for now as well, and remove this odd hack here.

And saying the value is "too large" mostly means "out of range" I guess.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D91142/new/

https://reviews.llvm.org/D91142



More information about the libcxx-commits mailing list