extern int orig_umask;
extern int list_only;
-extern struct exclude_list_struct exclude_list;
-extern struct exclude_list_struct server_exclude_list;
+extern struct filter_list_struct filter_list;
+extern struct filter_list_struct server_filter_list;
int io_error;
#endif
}
-/*
- * This function is used to check if a file should be included/excluded
+/* This function is used to check if a file should be included/excluded
* from the list of files based on its name and type etc. The value of
- * exclude_level is set to either SERVER_EXCLUDES or ALL_EXCLUDES.
- */
-static int check_exclude_file(char *fname, int is_dir, int exclude_level)
+ * filter_level is set to either SERVER_FILTERS or ALL_FILTERS. */
+static int is_excluded(char *fname, int is_dir, int filter_level)
{
#if 0 /* This currently never happens, so avoid a useless compare. */
- if (exclude_level == NO_EXCLUDES)
+ if (filter_level == NO_FILTERS)
return 0;
#endif
if (fname) {
return 0;
}
}
- if (server_exclude_list.head
- && check_exclude(&server_exclude_list, fname, is_dir) < 0)
+ if (server_filter_list.head
+ && check_filter(&server_filter_list, fname, is_dir) < 0)
return 1;
- if (exclude_level != ALL_EXCLUDES)
+ if (filter_level != ALL_FILTERS)
return 0;
- if (exclude_list.head
- && check_exclude(&exclude_list, fname, is_dir) < 0)
+ if (filter_list.head
+ && check_filter(&filter_list, fname, is_dir) < 0)
return 1;
return 0;
}
static gid_t gid;
static char lastname[MAXPATHLEN], *lastdir;
static int lastdir_depth, lastdir_len = -1;
- static unsigned int del_heir_name_len = -1;
+ static unsigned int del_heir_name_len = 0;
static int in_del_hier = 0;
char thisname[MAXPATHLEN];
unsigned int l1 = 0, l2 = 0;
rdev_major = 0;
uid = 0, gid = 0;
*lastname = '\0';
- del_heir_name_len = lastdir_len = -1;
+ lastdir_len = -1;
in_del_hier = 0;
return;
}
* important case. Some systems may not have d_type.
**/
struct file_struct *make_file(char *fname, struct file_list *flist,
- int exclude_level)
+ int filter_level)
{
static char *lastdir;
static int lastdir_len = -1;
if (readlink_stat(thisname, &st, linkname) != 0) {
int save_errno = errno;
/* See if file is excluded before reporting an error. */
- if (exclude_level != NO_EXCLUDES
- && check_exclude_file(thisname, 0, exclude_level))
+ if (filter_level != NO_FILTERS
+ && is_excluded(thisname, 0, filter_level))
return NULL;
if (save_errno == ENOENT) {
#if SUPPORT_LINKS
return NULL;
}
- /* backup.c calls us with exclude_level set to NO_EXCLUDES. */
- if (exclude_level == NO_EXCLUDES)
- goto skip_excludes;
+ /* backup.c calls us with filter_level set to NO_FILTERS. */
+ if (filter_level == NO_FILTERS)
+ goto skip_filters;
if (S_ISDIR(st.st_mode) && !xfer_dirs) {
rprintf(FINFO, "skipping directory %s\n", thisname);
&& S_ISDIR(st.st_mode))
flags |= FLAG_MOUNT_POINT;
- if (check_exclude_file(thisname, S_ISDIR(st.st_mode) != 0, exclude_level))
+ if (is_excluded(thisname, S_ISDIR(st.st_mode) != 0, filter_level))
return NULL;
if (lp_ignore_nonreadable(module_id)) {
return NULL;
}
-skip_excludes:
+skip_filters:
if (verbose > 2) {
rprintf(FINFO, "[%s] make_file(%s,*,%d)\n",
- who_am_i(), thisname, exclude_level);
+ who_am_i(), thisname, filter_level);
}
if ((basename = strrchr(thisname, '/')) != NULL) {
memcpy(bp, basename, basename_len);
bp += basename_len;
-#ifdef HAVE_STRUCT_STAT_ST_RDEV
+#if HAVE_STRUCT_STAT_ST_RDEV
if (preserve_devices && IS_DEVICE(st.st_mode))
file->u.rdev = st.st_rdev;
#endif
/* f is set to -1 when calculating deletion file list */
file = make_file(fname, flist,
- f == -1 && delete_excluded? SERVER_EXCLUDES : ALL_EXCLUDES);
+ f == -1 && delete_excluded? SERVER_FILTERS : ALL_FILTERS);
if (!file)
return;
struct dirent *di;
char fname[MAXPATHLEN];
unsigned int offset;
- void *save_excludes;
+ void *save_filters;
char *p;
d = opendir(dir);
offset++;
}
- save_excludes = push_local_excludes(fname, offset);
+ save_filters = push_local_filters(fname, offset);
for (errno = 0, di = readdir(d); di; errno = 0, di = readdir(d)) {
char *dname = d_name(di);
rsyserr(FERROR, errno, "readdir(%s)", dir);
}
- pop_local_excludes(save_excludes);
+ pop_local_filters(save_filters);
closedir(d);
}
char lastpath[MAXPATHLEN] = "";
struct file_list *flist;
BOOL need_first_push = True;
+ struct timeval start_tv, end_tv;
int64 start_write;
int use_ff_fd = 0;
start_filelist_progress("building file list");
start_write = stats.total_written;
+ gettimeofday(&start_tv, NULL);
flist = flist_new(f == -1 ? WITHOUT_HLINK : WITH_HLINK,
"send_file_list");
}
use_ff_fd = 1;
if (curr_dir_len < MAXPATHLEN - 1) {
- push_local_excludes(curr_dir, curr_dir_len);
+ push_local_filters(curr_dir, curr_dir_len);
need_first_push = False;
}
}
if (need_first_push) {
if ((p = strrchr(fname, '/')) != NULL) {
if (*++p && strcmp(p, ".") != 0)
- push_local_excludes(fname, p - fname);
+ push_local_filters(fname, p - fname);
} else if (strcmp(fname, ".") != 0)
- push_local_excludes(fname, 0);
+ push_local_filters(fname, 0);
need_first_push = False;
}
}
if (f != -1) {
+ gettimeofday(&end_tv, NULL);
+ stats.flist_buildtime =
+ (int64)(end_tv.tv_sec - start_tv.tv_sec) * 1000
+ + (end_tv.tv_usec - start_tv.tv_usec) / 1000;
+ if (stats.flist_buildtime == 0)
+ stats.flist_buildtime = 1;
+ start_tv = end_tv;
+
send_file_entry(NULL, f, 0);
if (show_filelist_p())
finish_filelist_progress(flist);
+
+ gettimeofday(&end_tv, NULL);
+ stats.flist_xfertime =
+ (int64)(end_tv.tv_sec - start_tv.tv_sec) * 1000
+ + (end_tv.tv_usec - start_tv.tv_usec) / 1000;
}
if (flist->hlink_pool) {
safe_fname(f));
}
} else {
- delete_file(f, S_ISDIR(mode)
- ? DEL_DIR | DEL_RECURSE : 0);
+ int dflags = delete_during
+ ? DEL_DIR | DEL_FORCE_RECURSE
+ : DEL_DIR | DEL_NO_RECURSE;
+ delete_file(f, S_ISDIR(mode) ? dflags : 0);
}
deletion_count++;
}