diff options
author | Jeremy Allison <jra@samba.org> | 2009-08-21 21:44:21 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2009-08-21 21:44:21 -0700 |
commit | 1af0aa92b3f3467715f6ffbfedf66df1acc0a83c (patch) | |
tree | a151ed8cc04a4bea659b8d11484a197ca3b74b2c /source3/lib | |
parent | 47c7063dc62dc06d0cdd50e1946c088f8bf1ee1d (diff) | |
download | samba-1af0aa92b3f3467715f6ffbfedf66df1acc0a83c.tar.gz samba-1af0aa92b3f3467715f6ffbfedf66df1acc0a83c.tar.bz2 samba-1af0aa92b3f3467715f6ffbfedf66df1acc0a83c.zip |
Fix bug 6529 - Offline files conflict with Vista and Office 2003
On filesystems that can't store less than one second timestamps,
round the incoming timestamp set requests so the client can't discover
that a time set request has been truncated by the filesystem.
Needs backporting to 3.4, 3.3, 3.2 and (even) 3.0.
Jeremy
Diffstat (limited to 'source3/lib')
-rw-r--r-- | source3/lib/time.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/source3/lib/time.c b/source3/lib/time.c index a2e615acc5..06605cd30a 100644 --- a/source3/lib/time.c +++ b/source3/lib/time.c @@ -468,6 +468,17 @@ int timespec_compare(const struct timespec *ts1, const struct timespec *ts2) } /**************************************************************************** + Round up a timespec if nsec > 500000000, round down if lower, + then zero nsec. +****************************************************************************/ + +void round_timespec(struct timespec *ts) +{ + ts->tv_sec += ts->tv_nsec >= 500000000 ? 1 : 0; + ts->tv_nsec = 0; +} + +/**************************************************************************** Interprets an nt time into a unix struct timespec. Differs from nt_time_to_unix in that an 8 byte value of 0xffffffffffffffff will be returned as (time_t)-1, whereas nt_time_to_unix returns 0 in this case. |