X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/26beb7861fbcc7abec92acfe3773f8154c39fe7a..8ce65463104988d0d90fd9e8b2e55aa28ddd9482:/generator.c diff --git a/generator.c b/generator.c index b0744557..7ae5ab7e 100644 --- a/generator.c +++ b/generator.c @@ -323,8 +323,9 @@ void itemize(struct file_struct *file, int ndx, int statret, STRUCT_STAT *st, : S_ISDIR(file->mode) ? !omit_dir_times : !S_ISLNK(file->mode); - if ((iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE) && !keep_time) - || (keep_time && file->modtime != st->st_mtime)) + if ((iflags & (ITEM_TRANSFER|ITEM_LOCAL_CHANGE) && !keep_time + && (!(iflags & ITEM_XNAME_FOLLOWS) || *xname)) + || (keep_time && cmp_modtime(file->modtime, st->st_mtime) != 0)) iflags |= ITEM_REPORT_TIME; if (preserve_perms && file->mode != st->st_mode) iflags |= ITEM_REPORT_PERMS; @@ -528,7 +529,7 @@ static int find_fuzzy(struct file_struct *file, struct file_list *dirlist) name = fp->basename; if (fp->length == file->length - && fp->modtime == file->modtime) { + && cmp_modtime(fp->modtime, file->modtime) == 0) { if (verbose > 4) { rprintf(FINFO, "fuzzy size/modtime match for %s\n", @@ -706,7 +707,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, if (statret != 0 && do_mkdir(fname,file->mode) != 0 && errno != EEXIST) { if (!relative_paths || errno != ENOENT || create_directory_path(fname, orig_umask) < 0 - || do_mkdir(fname, file->mode) < 0) { + || (do_mkdir(fname, file->mode) < 0 && errno != EEXIST)) { rsyserr(FERROR, errno, "recv_generator: mkdir %s failed", full_fname(fname));