mirror of
https://github.com/samba-team/samba.git
synced 2024-12-25 23:21:54 +03:00
Second part of fix for 6529 - Offline files conflict with Vista and Office 2003.
ext4 may be able to store ns timestamps, but the only API to *set* timestamps takes usec, not nsec. Round to usec on set requests. Jeremy.
This commit is contained in:
parent
e829ca560d
commit
87d30a1968
@ -1045,6 +1045,7 @@ struct timespec timespec_min(const struct timespec *ts1,
|
|||||||
const struct timespec *ts2);
|
const struct timespec *ts2);
|
||||||
int timespec_compare(const struct timespec *ts1, const struct timespec *ts2);
|
int timespec_compare(const struct timespec *ts1, const struct timespec *ts2);
|
||||||
void round_timespec(struct timespec *ts);
|
void round_timespec(struct timespec *ts);
|
||||||
|
void round_timespec_to_usec(struct timespec *ts);
|
||||||
struct timespec interpret_long_date(const char *p);
|
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_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);
|
void cli_put_dos_date2(struct cli_state *cli, char *buf, int offset, time_t unixdate);
|
||||||
|
@ -478,6 +478,16 @@ void round_timespec(struct timespec *ts)
|
|||||||
ts->tv_nsec = 0;
|
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.
|
Interprets an nt time into a unix struct timespec.
|
||||||
Differs from nt_time_to_unix in that an 8 byte value of 0xffffffffffffffff
|
Differs from nt_time_to_unix in that an 8 byte value of 0xffffffffffffffff
|
||||||
|
@ -5409,6 +5409,17 @@ NTSTATUS smb_set_file_time(connection_struct *conn,
|
|||||||
round_timespec(&ft->ctime);
|
round_timespec(&ft->ctime);
|
||||||
round_timespec(&ft->atime);
|
round_timespec(&ft->atime);
|
||||||
round_timespec(&ft->mtime);
|
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 ",
|
DEBUG(5,("smb_set_filetime: actime: %s\n ",
|
||||||
|
Loading…
Reference in New Issue
Block a user