www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 20785] New: std.file.setTimes: on macOS use setattrlist to


          Issue ID: 20785
           Summary: std.file.setTimes: on macOS use setattrlist to avoid
                    truncating timestamp precision to microseconds
           Product: D
           Version: D2
          Hardware: All
                OS: Mac OS X
            Status: NEW
          Severity: normal
          Priority: P1
         Component: phobos
          Assignee: nobody puremagic.com
          Reporter: n8sh.secondary hotmail.com

This was brought to my attention by a unit test in
https://github.com/CyberShadow/ae/blob/master/sys/persistence/core.d that was
failing on macOS because it was storing a result of `timeLastModified` then
using the stored value as an argument to `setTimes` and expecting that the next
call to `timeLastModified` would yield the same result as the stored value. The
problem is that on macOS std.file uses hecto-nanosecond precision (converted
from nanosecond) when reading file access/modification times but only uses
microsecond precision when writing them. This is because
core.sys.posix.sys.stat does not have `utimensat` for macOS, which is because
it only became available in macOS starting from version 10.13 which was
released in 2017. As an alternative `setattrlist` can be used with any version
of macOS to set timestamps with the same precision as `utimensat`.

Apr 28 2020