Added 2 new config options: "pre-xfer exec" and "post-xfer exec".
[rsync/rsync.git] / flist.c
diff --git a/flist.c b/flist.c
index 5526e20..30e88ab 100644 (file)
--- a/flist.c
+++ b/flist.c
@@ -546,7 +546,7 @@ static struct file_struct *receive_file_entry(struct file_list *flist,
                rprintf(FERROR,
                        "overflow: flags=0x%x l1=%d l2=%d lastname=%s\n",
                        flags, l1, l2, safe_fname(lastname));
-               overflow("receive_file_entry");
+               overflow_exit("receive_file_entry");
        }
 
        strlcpy(thisname, lastname, l1 + 1);
@@ -611,7 +611,7 @@ static struct file_struct *receive_file_entry(struct file_list *flist,
                if (linkname_len <= 0 || linkname_len > MAXPATHLEN) {
                        rprintf(FERROR, "overflow: linkname_len=%d\n",
                                linkname_len - 1);
-                       overflow("receive_file_entry");
+                       overflow_exit("receive_file_entry");
                }
        }
        else
@@ -1122,7 +1122,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
                                fname[1] = '\0';
                        } else {
                                if (l + 1 >= MAXPATHLEN)
-                                       overflow("send_file_list");
+                                       overflow_exit("send_file_list");
                                fname[l++] = '.';
                                fname[l] = '\0';
                        }
@@ -1130,7 +1130,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
                } else if (l > 1 && fname[l-1] == '.' && fname[l-2] == '.'
                    && (l == 2 || fname[l-3] == '/')) {
                        if (l + 2 >= MAXPATHLEN)
-                               overflow("send_file_list");
+                               overflow_exit("send_file_list");
                        fname[l++] = '/';
                        fname[l++] = '.';
                        fname[l] = '\0';
@@ -1159,7 +1159,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
                if (!relative_paths) {
                        p = strrchr(fname, '/');
                        if (p) {
-                               *p = 0;
+                               *p = '\0';
                                if (p == fname)
                                        dir = "/";
                                else
@@ -1167,10 +1167,10 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
                                fname = p + 1;
                        }
                } else if (implied_dirs && (p=strrchr(fname,'/')) && p != fname) {
-                       /* this ensures we send the intermediate directories,
-                          thus getting their permissions right */
+                       /* Send the implied directories at the start of the
+                        * source spec, so we get their permissions right. */
                        char *lp = lastpath, *fn = fname, *slash = fname;
-                       *p = 0;
+                       *p = '\0';
                        /* Skip any initial directories in our path that we
                         * have in common with lastpath. */
                        while (*fn && *lp == *fn) {
@@ -1185,13 +1185,13 @@ struct file_list *send_file_list(int f, int argc, char *argv[])
                                copy_links = copy_unsafe_links;
                                xfer_dirs = 1;
                                while ((slash = strchr(slash+1, '/')) != 0) {
-                                       *slash = 0;
+                                       *slash = '\0';
                                        send_file_name(f, flist, fname, 0);
                                        *slash = '/';
                                }
                                copy_links = save_copy_links;
                                xfer_dirs = save_xfer_dirs;
-                               *p = 0;
+                               *p = '\0';
                                strlcpy(lastpath, fname, sizeof lastpath);
                                *p = '/';
                        }
@@ -1471,8 +1471,12 @@ static void clean_flist(struct file_list *flist, int strip_root, int no_dups)
 {
        int i, prev_i = 0;
 
-       if (!flist || flist->count == 0)
+       if (!flist)
+               return;
+       if (flist->count == 0) {
+               flist->high = -1;
                return;
+       }
 
        sorting_flist = flist;
        qsort(flist->files, flist->count,