added RSYNC_PROXY support from Stephen Rothwell. This allows access to
[rsync/rsync.git] / generator.c
index 06c1fa4..d77e7b5 100644 (file)
@@ -31,6 +31,7 @@ extern int whole_file;
 extern int block_size;
 extern int csum_length;
 extern int ignore_times;
+extern int size_only;
 extern int io_timeout;
 extern int remote_version;
 extern int always_checksum;
@@ -52,6 +53,10 @@ static int skip_file(char *fname,
                return (memcmp(sum,file->sum,csum_length) == 0);
        }
 
+       if (size_only) {
+               return 1;
+       }
+
        if (ignore_times) {
                return 0;
        }
@@ -177,7 +182,7 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out)
        if (S_ISDIR(file->mode)) {
                if (dry_run) return;
                if (statret == 0 && !S_ISDIR(st.st_mode)) {
-                       if (do_unlink(fname) != 0) {
+                       if (robust_unlink(fname) != 0) {
                                rprintf(FERROR,"unlink %s : %s\n",fname,strerror(errno));
                                return;
                        }
@@ -273,7 +278,7 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out)
        if ((statret == -1) && (compare_dest != NULL)) {
                /* try the file at compare_dest instead */
                int saveerrno = errno;
-               slprintf(fnamecmpbuf,MAXPATHLEN-1,"%s/%s",compare_dest,fname);
+               slprintf(fnamecmpbuf,MAXPATHLEN,"%s/%s",compare_dest,fname);
                statret = link_stat(fnamecmpbuf,&st);
                if (!S_ISREG(st.st_mode))
                        statret = -1;
@@ -312,7 +317,8 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out)
        }
 
        if (skip_file(fname, file, &st)) {
-               set_perms(fname,file,&st,1);
+               if (fnamecmp == fname)
+                       set_perms(fname,file,&st,1);
                return;
        }