const struct timespec *ts2);
int timespec_compare(const struct timespec *ts1, const struct timespec *ts2);
void round_timespec(struct timespec *ts);
+void round_timespec_to_usec(struct timespec *ts);
struct timespec interpret_long_date(const char *p);
void cli_put_dos_date(struct cli_state *cli, char *buf, int offset, time_t unixdate);
void cli_put_dos_date2(struct cli_state *cli, char *buf, int offset, time_t unixdate);
ts->tv_nsec = 0;
}
+/****************************************************************************
+ Round a timespec to usec value.
+****************************************************************************/
+
+void round_timespec_to_usec(struct timespec *ts)
+{
+ struct timeval tv = convert_timespec_to_timeval(*ts);
+ *ts = convert_timeval_to_timespec(tv);
+}
+
/****************************************************************************
Interprets an nt time into a unix struct timespec.
Differs from nt_time_to_unix in that an 8 byte value of 0xffffffffffffffff
round_timespec(&ft->ctime);
round_timespec(&ft->atime);
round_timespec(&ft->mtime);
+ } else {
+ /* The highest resolution timestamp
+ * setting function available in POSIX
+ * is utimes(), which uses usec resolution,
+ * not nsec resolution. So we must round to
+ * usec, then back to nsec. JRA.
+ */
+ round_timespec_to_usec(&ft->create_time);
+ round_timespec_to_usec(&ft->ctime);
+ round_timespec_to_usec(&ft->atime);
+ round_timespec_to_usec(&ft->mtime);
}
DEBUG(5,("smb_set_filetime: actime: %s\n ",