The log_delete() function may now be called even when the client is
[rsync/rsync.git] / flist.c
diff --git a/flist.c b/flist.c
index 4334076..110c304 100644 (file)
--- a/flist.c
+++ b/flist.c
@@ -963,7 +963,7 @@ skip_filters:
                        file->mode = save_mode;
        }
 
-       if (!S_ISDIR(st.st_mode))
+       if (S_ISREG(st.st_mode) || S_ISLNK(st.st_mode))
                stats.total_size += st.st_size;
 
        return file;
@@ -1790,6 +1790,7 @@ int delete_file(char *fname, int mode, int flags)
        struct file_list *dirlist;
        char buf[MAXPATHLEN];
        int j, zap_dir, ok;
+       void *save_filters;
 
        if (max_delete && deletion_count >= max_delete)
                return -1;
@@ -1837,6 +1838,8 @@ int delete_file(char *fname, int mode, int flags)
        }
        flags |= DEL_FORCE_RECURSE;
 
+       save_filters = push_local_filters(fname, strlen(fname));
+
        dirlist = get_dirlist(fname, 0);
        for (j = dirlist->count; j--; ) {
                struct file_struct *fp = dirlist->files[j];
@@ -1848,6 +1851,8 @@ int delete_file(char *fname, int mode, int flags)
        }
        flist_free(dirlist);
 
+       pop_local_filters(save_filters);
+
        if (max_delete && deletion_count >= max_delete)
                return -1;