Use typedefs for the filter structures.
[rsync/rsync.git] / receiver.c
index 4325e30..9d839fa 100644 (file)
@@ -56,7 +56,7 @@ extern char *partial_dir;
 extern char *basis_dir[MAX_BASIS_DIRS+1];
 extern char sender_file_sum[MAX_DIGEST_LEN];
 extern struct file_list *cur_flist, *first_flist, *dir_flist;
-extern struct filter_list_struct daemon_filter_list;
+extern filter_rule_list daemon_filter_list;
 
 static struct bitbag *delayed_bits = NULL;
 static int phase = 0, redoing = 0;
@@ -147,7 +147,7 @@ int open_tmpfile(char *fnametmp, const char *fname, struct file_struct *file)
         * information should have been previously transferred, but that may
         * not be the case with -R */
        if (fd == -1 && relative_paths && errno == ENOENT
-           && create_directory_path(fnametmp) == 0) {
+        && make_path(fnametmp, MKP_SKIP_SLASH | MKP_DROP_NAME) == 0) {
                /* Get back to name with XXXXXX in it. */
                get_tmpname(fnametmp, fname);
                fd = do_mkstemp(fnametmp, file->mode & INITACCESSPERMS);
@@ -361,7 +361,7 @@ static void no_batched_update(int ndx, BOOL is_redo)
        rprintf(FERROR_XFER, "(No batched update for%s \"%s\")\n",
                is_redo ? " resend of" : "", f_name(file, NULL));
 
-       if (inc_recurse)
+       if (inc_recurse && !dry_run)
                send_msg_int(MSG_NO_SEND, ndx);
 }
 
@@ -491,14 +491,14 @@ int recv_files(int f_in, char *local_name)
                        rprintf(FINFO, "recv_files(%s)\n", fname);
 
 #ifdef SUPPORT_XATTRS
-               if (iflags & ITEM_REPORT_XATTR && !dry_run)
+               if (iflags & ITEM_REPORT_XATTR && do_xfers)
                        recv_xattr_request(file, f_in);
 #endif
 
                if (!(iflags & ITEM_TRANSFER)) {
                        maybe_log_item(file, iflags, itemizing, xname);
 #ifdef SUPPORT_XATTRS
-                       if (preserve_xattrs && iflags & ITEM_REPORT_XATTR && !dry_run)
+                       if (preserve_xattrs && iflags & ITEM_REPORT_XATTR && do_xfers)
                                set_file_attrs(fname, file, NULL, fname, 0);
 #endif
                        if (iflags & ITEM_IS_NEW) {
@@ -562,19 +562,6 @@ int recv_files(int f_in, char *local_name)
                        exit_cleanup(RERR_PROTOCOL);
                }
 
-               if (!do_xfers) { /* log the transfer */
-                       log_item(FCLIENT, file, &stats, iflags, NULL);
-                       if (read_batch)
-                               discard_receive_data(f_in, F_LENGTH(file));
-                       continue;
-               }
-               if (write_batch < 0) {
-                       log_item(FCLIENT, file, &stats, iflags, NULL);
-                       if (!am_server)
-                               discard_receive_data(f_in, F_LENGTH(file));
-                       continue;
-               }
-
                if (read_batch) {
                        int wanted = redoing
                                   ? we_want_redo(ndx)
@@ -590,6 +577,19 @@ int recv_files(int f_in, char *local_name)
                        }
                }
 
+               if (!do_xfers) { /* log the transfer */
+                       log_item(FCLIENT, file, &stats, iflags, NULL);
+                       if (read_batch)
+                               discard_receive_data(f_in, F_LENGTH(file));
+                       continue;
+               }
+               if (write_batch < 0) {
+                       log_item(FCLIENT, file, &stats, iflags, NULL);
+                       if (!am_server)
+                               discard_receive_data(f_in, F_LENGTH(file));
+                       continue;
+               }
+
                partialptr = partial_dir ? partial_dir_fname(fname) : fname;
 
                if (protocol_version >= 29) {