- if (!S_ISREG(flist->files[i].mode)) {
- fprintf(stderr,"skipping non-regular file %s\n",fname);
- return;
- }
-
- if (statret == -1) {
- if (errno == ENOENT) {
- write_int(f_out,i);
- if (!dry_run) send_sums(NULL,f_out);
- } else {
- if (verbose > 1)
- fprintf(stderr,"recv_generator failed to open %s\n",fname);
- }
- return;
- }
-
- if (!S_ISREG(st.st_mode)) {
- fprintf(stderr,"%s : not a regular file\n",fname);
- return;
- }
-
- if (update_only && st.st_mtime >= flist->files[i].modtime) {
- if (verbose > 1)
- fprintf(stderr,"%s is newer\n",fname);
- return;
- }
-
- if (always_checksum && S_ISREG(st.st_mode)) {
- file_checksum(fname,sum,st.st_size);
- }
-
- if (st.st_size == flist->files[i].length &&
- ((!ignore_times && st.st_mtime == flist->files[i].modtime) ||
- (always_checksum && S_ISREG(st.st_mode) &&
- memcmp(sum,flist->files[i].sum,SUM_LENGTH) == 0))) {
- set_perms(fname,&flist->files[i],&st,1);
- return;
- }
-
- if (dry_run) {
- write_int(f_out,i);
- return;
- }
-
- /* open the file */
- fd = open(fname,O_RDONLY);
-
- if (fd == -1) {
- fprintf(stderr,"failed to open %s : %s\n",fname,strerror(errno));
- return;
- }
-
- if (st.st_size > 0) {
- buf = map_file(fd,st.st_size);
- if (!buf) {
- fprintf(stderr,"mmap : %s\n",strerror(errno));
- close(fd);
- return;
- }
- } else {
- buf = NULL;
- }
-
- if (verbose > 3)
- fprintf(stderr,"mapped %s of size %d\n",fname,(int)st.st_size);
-
- s = generate_sums(buf,st.st_size,block_size);
-
- write_int(f_out,i);
- send_sums(s,f_out);
- write_flush(f_out);
-
- close(fd);
- unmap_file(buf,st.st_size);
-
- free_sums(s);
-}
-
+ if (!preserve_times || (S_ISDIR(sxp->st.st_mode) && preserve_times == 1))
+ flags |= ATTRS_SKIP_MTIME;
+ if (!(flags & ATTRS_SKIP_MTIME)
+ && cmp_time(sxp->st.st_mtime, file->modtime) != 0) {
+ int ret = set_modtime(fname, file->modtime, sxp->st.st_mode);
+ if (ret < 0) {
+ rsyserr(FERROR_XFER, errno, "failed to set times on %s",
+ full_fname(fname));
+ goto cleanup;
+ }
+ if (ret == 0) /* ret == 1 if symlink could not be set */
+ updated = 1;
+ else
+ file->flags |= FLAG_TIME_FAILED;
+ }