Ticket #4542 (new enhancement) — at Initial Version
Timestamps with nanosecond precision support is broken on macOS
| Reported by: | zaytsev | Owned by: | |
|---|---|---|---|
| Priority: | major | Milestone: | 4.8.32 |
| Component: | mc-vfs | Version: | master |
| Keywords: | Cc: | ag | |
| Blocked By: | #4542 | Blocking: | |
| Branch state: | merged | Votes for changeset: |
Description
Followup ticket to #3575 and PR on GitHub? https://github.com/MidnightCommander/mc/pull/130
Sadly no-one came around to fix this, so packagers still disable the support manually:
https://github.com/Homebrew/homebrew-core/blob/master/Formula/m/midnight-commander.rb
https://github.com/macports/macports-ports/blame/master/sysutils/mc/Portfile
Here are the notes how to possible fix this:
---
Unfortunately, I think that the easiest way to access XNU sources from macOS 10.13 right now would be to get hired as a kernel developer by Apple. The system is not even officially released to the public yet (target date is 25th of September), and sources are usually released some time after the final release.
Anyways, I believe that source code access is not really necessary in the first place, as I would speculate that all one needs to do is to add
AC_CHECK_MEMBERS([struct stat.st_blksize, struct stat.st_rdev, struct stat.st_mtim, struct stat.st_mtimespec])
and wherever we use HAVE_STRUCT_STAT_ST_MTIM *or* HAVE_UTIMENSAT replace it with
#ifdef HAVE_STRUCT_STAT_ST_MTIM
st.st_atim.tv_nsec = st.st_mtim.tv_nsec = st.st_ctim.tv_nsec = 0;
#elif defined HAVE_STRUCT_STAT_ST_MTIMESPEC
st.st_atimespec.tv_nsec = st.st_mtimespec.tv_nsec = st.st_mtimespec.tv_nsec = 0;
#endif
or something along these lines and you will magically not only fix the build, but gain nanosecond precision support for macOS 10.13+ *and* BSD at the same time. Of course, cruft keeps accumulating, so ideally one should think about defining clever struct manipulation functions limiting define proliferation...
Better yet would be to undertake a major refactoring to clean up our time mess afterwards, but that's, of course, just wishful thinking.
