The branch, master has been updated via b7799aa Add nanosecond mtime support for Mac OS X. from ce854cf Add "syslog tag" to rsync daemon config.
https://git.samba.org/?p=rsync.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit b7799aaefe58c2e222224c83b02c3d763b01ef93 Author: Wayne Davison <way...@samba.org> Date: Thu Aug 31 08:22:14 2017 -0700 Add nanosecond mtime support for Mac OS X. Slightly tweaked the patch contributed by Heikki Lindholm. ----------------------------------------------------------------------- Summary of changes: configure.ac | 1 + flist.c | 4 ++-- rsync.h | 10 ++++++++-- syscall.c | 19 +++++++++++++++++++ util.c | 10 ++++++++++ 5 files changed, 40 insertions(+), 4 deletions(-) Changeset truncated at 500 lines: diff --git a/configure.ac b/configure.ac index e01e124..02d4cb8 100644 --- a/configure.ac +++ b/configure.ac @@ -400,6 +400,7 @@ AC_CHECK_TYPES([mode_t,off_t,size_t,pid_t,id_t]) AC_TYPE_GETGROUPS AC_CHECK_MEMBERS([struct stat.st_rdev, struct stat.st_mtimensec, + struct stat.st_mtimespec.tv_nsec, struct stat.st_mtim.tv_nsec],,,[ #ifdef HAVE_SYS_TYPES_H #include <sys/types.h> diff --git a/flist.c b/flist.c index 28553fc..24b3506 100644 --- a/flist.c +++ b/flist.c @@ -895,7 +895,7 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x if (file_length > 0xFFFFFFFFu && S_ISREG(mode)) extra_len += EXTRA_LEN; #endif -#ifdef HAVE_UTIMENSAT +#ifdef CAN_SET_NSEC if (modtime_nsec) extra_len += EXTRA_LEN; #endif @@ -941,7 +941,7 @@ static struct file_struct *recv_file_entry(int f, struct file_list *flist, int x file->flags |= FLAG_HLINKED; #endif file->modtime = (time_t)modtime; -#ifdef HAVE_UTIMENSAT +#ifdef CAN_SET_NSEC if (modtime_nsec) { file->flags |= FLAG_MOD_NSEC; OPT_EXTRA(file, 0)->unum = modtime_nsec; diff --git a/rsync.h b/rsync.h index 1720293..c51e8d3 100644 --- a/rsync.h +++ b/rsync.h @@ -372,7 +372,7 @@ enum delret { #include <utime.h> #endif -#if defined HAVE_UTIMENSAT || defined HAVE_LUTIMES +#if defined HAVE_UTIMENSAT || defined HAVE_LUTIMES || defined HAVE_SETATTRLIST #define CAN_SET_SYMLINK_TIMES 1 #endif @@ -384,11 +384,17 @@ enum delret { #define CAN_CHMOD_SYMLINK 1 #endif -#ifdef HAVE_UTIMENSAT +#if defined HAVE_UTIMENSAT || defined HAVE_SETATTRLIST +#define CAN_SET_NSEC 1 +#endif + +#ifdef CAN_SET_NSEC #ifdef HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC #define ST_MTIME_NSEC st_mtim.tv_nsec #elif defined(HAVE_STRUCT_STAT_ST_MTIMENSEC) #define ST_MTIME_NSEC st_mtimensec +#elif defined(HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC) +#define ST_MTIME_NSEC st_mtimespec.tv_nsec #endif #endif diff --git a/syscall.c b/syscall.c index d89eacd..dae92bc 100644 --- a/syscall.c +++ b/syscall.c @@ -360,6 +360,25 @@ OFF_T do_lseek(int fd, OFF_T offset, int whence) #endif } +#ifdef HAVE_SETATTRLIST +int do_setattrlist_times(const char *fname, time_t modtime, uint32 mod_nsec) +{ + struct attrlist attrList; + struct timespec ts; + + if (dry_run) return 0; + RETURN_ERROR_IF_RO_OR_LO; + + ts.tv_sec = modtime; + ts.tv_nsec = mod_nsec; + + memset(&attrList, 0, sizeof attrList); + attrList.bitmapcount = ATTR_BIT_MAP_COUNT; + attrList.commonattr = ATTR_CMN_MODTIME; + return setattrlist(fname, &attrList, &ts, sizeof ts, FSOPT_NOFOLLOW); +} +#endif + #ifdef HAVE_UTIMENSAT int do_utimensat(const char *fname, time_t modtime, uint32 mod_nsec) { diff --git a/util.c b/util.c index 49c5b71..d50900c 100644 --- a/util.c +++ b/util.c @@ -128,6 +128,16 @@ int set_modtime(const char *fname, time_t modtime, uint32 mod_nsec, mode_t mode) } switch (switch_step) { +#ifdef HAVE_SETATTRLIST +#include "case_N.h" + if (do_setattrlist_times(fname, modtime, mod_nsec) == 0) + break; + if (errno != ENOSYS) + return -1; + switch_step++; + /* FALLTHROUGH */ +#endif + #ifdef HAVE_UTIMENSAT #include "case_N.h" if (do_utimensat(fname, modtime, mod_nsec) == 0) -- The rsync repository. _______________________________________________ rsync-cvs mailing list rsync-cvs@lists.samba.org https://lists.samba.org/mailman/listinfo/rsync-cvs