Make all the rsync objects dependent on all the header files except the
[rsync/rsync.git] / generator.c
index 5321d8a..3f6322f 100644 (file)
@@ -192,7 +192,7 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out)
                /* if the file exists already and we aren't perserving
                    presmissions then act as though the remote end sent
                    us the file permissions we already have */
-               file->mode = st.st_mode;
+               file->mode = (file->mode & _S_IFMT) | (st.st_mode & ~_S_IFMT);
        }
 
        if (S_ISDIR(file->mode)) {
@@ -353,8 +353,10 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out)
        fd = do_open(fnamecmp, O_RDONLY, 0);
 
        if (fd == -1) {
-               rprintf(FERROR,"failed to open %s : %s\n",fnamecmp,strerror(errno));
-               rprintf(FERROR,"skipping %s\n",fname);
+               rprintf(FERROR,"failed to open %s, continuing : %s\n",fnamecmp,strerror(errno));
+               /* pretend the file didn't exist */
+               write_int(f_out,i);
+               send_sums(NULL,f_out);
                return;
        }