extern char *backup_suffix;
extern int backup_suffix_len;
extern struct file_list *cur_flist, *first_flist, *dir_flist;
-extern struct filter_list_struct server_filter_list;
+extern struct filter_list_struct daemon_filter_list;
int ignore_perishable = 0;
int non_perishable_cnt = 0;
for (j = 0; j < cur_flist->used; j++) {
struct file_struct *file = cur_flist->sorted[j];
- if (!(file->flags & FLAG_CONTENT_DIR))
+ f_name(file, fbuf);
+
+ if (!(file->flags & FLAG_CONTENT_DIR)) {
+ change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(file));
continue;
+ }
- f_name(file, fbuf);
if (verbose > 1 && file->flags & FLAG_TOP_DIR)
rprintf(FINFO, "deleting in %s\n", fbuf);
return;
}
- if (skip_dir && is_below(file, skip_dir)) {
- if (is_dir)
- file->flags |= FLAG_MISSING_DIR;
+ if (skip_dir) {
+ if (is_below(file, skip_dir)) {
+ if (is_dir)
+ file->flags |= FLAG_MISSING_DIR;
#ifdef SUPPORT_HARD_LINKS
- else if (F_IS_HLINKED(file))
- handle_skipped_hlink(file, itemizing, code, f_out);
+ else if (F_IS_HLINKED(file))
+ handle_skipped_hlink(file, itemizing, code, f_out);
#endif
- return;
- } else
+ return;
+ }
skip_dir = NULL;
+ }
- if (server_filter_list.head) {
- if (check_filter(&server_filter_list, fname, is_dir) < 0) {
+ if (daemon_filter_list.head) {
+ if (check_filter(&daemon_filter_list, FLOG, fname, is_dir) < 0) {
if (is_dir < 0)
return;
#ifdef SUPPORT_HARD_LINKS
statret = -1;
stat_errno = ENOENT;
} else {
- dry_missing_dir = NULL;
const char *dn = file->dirname ? file->dirname : ".";
+ dry_missing_dir = NULL;
if (parent_dirname != dn && strcmp(parent_dirname, dn) != 0) {
if (relative_paths && !implied_dirs
&& do_stat(dn, &sx.st) < 0) {
statret = -1;
}
if (dry_run && statret != 0) {
- dry_missing_dir = file;
+ if (!dry_missing_dir)
+ dry_missing_dir = file;
file->flags |= FLAG_MISSING_DIR;
}
real_ret = statret;
}
}
else if (delete_during && f_out != -1 && !phase
- && BITS_SETnUNSET(file->flags, FLAG_CONTENT_DIR, FLAG_MISSING_DIR))
- delete_in_dir(fname, file, &real_sx.st.st_dev);
+ && !(file->flags & FLAG_MISSING_DIR)) {
+ if (file->flags & FLAG_CONTENT_DIR)
+ delete_in_dir(fname, file, &real_sx.st.st_dev);
+ else
+ change_local_filter_dir(fname, strlen(fname), F_DEPTH(file));
+ }
goto cleanup;
}
f_name(fp, fbuf);
ndx = cur_flist->ndx_start - 1;
recv_generator(fbuf, fp, ndx, itemizing, code, f_out);
- if (delete_during && dry_run < 2 && !list_only) {
- if (BITS_SETnUNSET(fp->flags, FLAG_CONTENT_DIR, FLAG_MISSING_DIR)) {
+ if (delete_during && dry_run < 2 && !list_only
+ && !(fp->flags & FLAG_MISSING_DIR)) {
+ if (fp->flags & FLAG_CONTENT_DIR) {
dev_t dirdev;
if (one_file_system) {
uint32 *devp = F_DIR_DEV_P(fp);
dirdev = MAKEDEV(DEV_MAJOR(devp), DEV_MINOR(devp));
} else
dirdev = MAKEDEV(0, 0);
- delete_in_dir(f_name(fp, fbuf), fp, &dirdev);
- }
+ delete_in_dir(fbuf, fp, &dirdev);
+ } else
+ change_local_filter_dir(fbuf, strlen(fbuf), F_DEPTH(fp));
}
}
for (i = cur_flist->low; i <= cur_flist->high; i++) {