X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/cabd60fdce8b69e429d77ba243cfc1eebed22301..39411fa876bb23ad9ba9b05c5b62912dc6d3108a:/flist.c diff --git a/flist.c b/flist.c index 55a6499d..8e543a63 100644 --- a/flist.c +++ b/flist.c @@ -48,6 +48,8 @@ extern int preserve_uid; extern int preserve_gid; extern int relative_paths; extern int implied_dirs; +extern int ignore_perishable; +extern int non_perishable_cnt; extern int prune_empty_dirs; extern int copy_links; extern int copy_unsafe_links; @@ -253,7 +255,7 @@ static mode_t from_wire_mode(int mode) static void send_directory(int f, struct file_list *flist, char *fbuf, int len); -static char *flist_dir; +static const char *flist_dir; static int flist_dir_len; @@ -752,8 +754,12 @@ struct file_struct *make_file(char *fname, struct file_list *flist, int save_errno = errno; /* See if file is excluded before reporting an error. */ if (filter_level != NO_FILTERS - && is_excluded(thisname, 0, filter_level)) + && (is_excluded(thisname, 0, filter_level) + || is_excluded(thisname, 1, filter_level))) { + if (ignore_perishable && save_errno != ENOENT) + non_perishable_cnt++; return NULL; + } if (save_errno == ENOENT) { #ifdef SUPPORT_LINKS /* Avoid "vanished" error if symlink points nowhere. */ @@ -803,8 +809,11 @@ struct file_struct *make_file(char *fname, struct file_list *flist, flags |= FLAG_MOUNT_POINT; } - if (is_excluded(thisname, S_ISDIR(st.st_mode) != 0, filter_level)) + if (is_excluded(thisname, S_ISDIR(st.st_mode) != 0, filter_level)) { + if (ignore_perishable) + non_perishable_cnt++; return NULL; + } if (lp_ignore_nonreadable(module_id)) { #ifdef SUPPORT_LINKS @@ -1207,7 +1216,7 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) } if (dir && *dir) { - static char *lastdir; + static const char *lastdir; static int lastdir_len; strlcpy(olddir, curr_dir, sizeof olddir); @@ -1228,11 +1237,8 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) } } - if (fn != fbuf) { - if (len >= MAXPATHLEN) - overflow_exit("send_file_list"); + if (fn != fbuf) memmove(fbuf, fn, len + 1); - } if (implied_dirs && (p=strrchr(fbuf,'/')) && p != fbuf) { /* Send the implied directories at the start of the