Solaris 11 (possibly only 11.4) stat() can return st_[amc]tim.tv_nsec < 0, which leads to invalid values trying to set time on destination. Gnulib has a stat_time_normalize() function in stat-time.h that might be useful to sanitise this. Probably needed in both do_stat() and do_lstat(), though I only needed to bodge do_lstat() to get over my immediate problem. https://github.com/WayneD/rsync/pull/504