Moved the size-parsing code for --max-size into its own function.
[rsync/rsync.git] / generator.c
index 3077a13..a1e5663 100644 (file)
@@ -210,7 +210,7 @@ static void delete_in_dir(struct file_list *flist, char *fbuf,
        struct file_list *dirlist;
        char delbuf[MAXPATHLEN];
        STRUCT_STAT st;
-       int dlen, i, j;
+       int dlen, i;
 
        if (!flist) {
                while (cur_depth >= min_depth)
@@ -226,9 +226,6 @@ static void delete_in_dir(struct file_list *flist, char *fbuf,
        if (allowed_lull)
                maybe_send_keepalive();
 
-       if (file->flags & FLAG_MOUNT_POINT)
-               return;
-
        if (file->dir.depth >= MAXPATHLEN/2+1)
                return; /* Impossible... */
 
@@ -252,8 +249,12 @@ static void delete_in_dir(struct file_list *flist, char *fbuf,
        if (link_stat(fbuf, &st, keep_dirlinks) < 0)
                return;
 
-       if (one_file_system && file->flags & FLAG_TOP_DIR)
-               filesystem_dev = st.st_dev;
+       if (one_file_system) {
+               if (file->flags & FLAG_TOP_DIR)
+                       filesystem_dev = st.st_dev;
+               else if (filesystem_dev != st.st_dev)
+                       return;
+       }
 
        dirlist = get_dirlist(fbuf, dlen, 0);
 
@@ -263,13 +264,12 @@ static void delete_in_dir(struct file_list *flist, char *fbuf,
                struct file_struct *fp = dirlist->files[i];
                if (!fp->basename)
                        continue;
-               if ((j = flist_find(flist, fp)) < 0) {
+               if (flist_find(flist, fp) < 0) {
                        int mode = fp->mode;
                        f_name_to(fp, delbuf);
                        if (delete_item(delbuf, mode, DEL_FORCE_RECURSE) < 0)
                                break;
-               } else if (fp->flags & FLAG_MOUNT_POINT)
-                       flist->files[j]->flags |= FLAG_MOUNT_POINT;
+               }
        }
 
        flist_free(dirlist);
@@ -1194,8 +1194,11 @@ void generate_files(int f_out, struct file_list *flist, char *local_name)
                        : "enabled");
        }
 
-       if (protocol_version < 29)
-               ignore_timeout = 1;
+       /* Since we often fill up the outgoing socket and then just sit around
+        * waiting for the other 2 processes to do their thing, we don't want
+        * to exit on a timeout.  If the data stops flowing, the receiver will
+        * notice that and let us know via the redo pipe (or its closing). */
+       ignore_timeout = 1;
 
        for (i = 0; i < flist->count; i++) {
                struct file_struct *file = flist->files[i];
@@ -1241,10 +1244,6 @@ void generate_files(int f_out, struct file_list *flist, char *local_name)
        ignore_times = 1;
        make_backups = 0; /* avoid a duplicate backup for inplace processing */
 
-       /* We expect to just sit around now, so don't exit on a timeout.
-        * If we really get a timeout then the other process should exit. */
-       ignore_timeout = 1;
-
        if (verbose > 2)
                rprintf(FINFO,"generate_files phase=%d\n",phase);