Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
- The call to delete_file() needs DEL_NO_RECURSE when handling
[rsync/rsync.git]
/
flist.c
diff --git
a/flist.c
b/flist.c
index
c607d73
..
c513e5a
100644
(file)
--- a/
flist.c
+++ b/
flist.c
@@
-70,8
+70,8
@@
extern int max_delete;
extern int orig_umask;
extern int list_only;
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;
int io_error;
@@
-220,15
+220,13
@@
int link_stat(const char *path, STRUCT_STAT *buffer, int follow_dirlinks)
#endif
}
#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
* 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 0 /* This currently never happens, so avoid a useless compare. */
- if (
exclude_level == NO_EXCLUDE
S)
+ if (
filter_level == NO_FILTER
S)
return 0;
#endif
if (fname) {
return 0;
#endif
if (fname) {
@@
-242,13
+240,13
@@
static int check_exclude_file(char *fname, int is_dir, int exclude_level)
return 0;
}
}
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;
return 1;
- if (
exclude_level != ALL_EXCLUDE
S)
+ if (
filter_level != ALL_FILTER
S)
return 0;
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;
}
return 1;
return 0;
}
@@
-758,7
+756,7
@@
void receive_file_entry(struct file_struct **fptr, unsigned short flags,
* important case. Some systems may not have d_type.
**/
struct file_struct *make_file(char *fname, struct file_list *flist,
* 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;
{
static char *lastdir;
static int lastdir_len = -1;
@@
-788,8
+786,8
@@
struct file_struct *make_file(char *fname, struct file_list *flist,
if (readlink_stat(thisname, &st, linkname) != 0) {
int save_errno = errno;
/* See if file is excluded before reporting an error. */
if (readlink_stat(thisname, &st, linkname) != 0) {
int save_errno = errno;
/* See if file is excluded before reporting an error. */
- if (
exclude_level != NO_EXCLUDE
S
- &&
check_exclude_file(thisname, 0, exclude
_level))
+ if (
filter_level != NO_FILTER
S
+ &&
is_excluded(thisname, 0, filter
_level))
return NULL;
if (save_errno == ENOENT) {
#if SUPPORT_LINKS
return NULL;
if (save_errno == ENOENT) {
#if SUPPORT_LINKS
@@
-816,9
+814,9
@@
struct file_struct *make_file(char *fname, struct file_list *flist,
return NULL;
}
return NULL;
}
- /* backup.c calls us with
exclude_level set to NO_EXCLUDE
S. */
- if (
exclude_level == NO_EXCLUDE
S)
- goto skip_
exclude
s;
+ /* backup.c calls us with
filter_level set to NO_FILTER
S. */
+ if (
filter_level == NO_FILTER
S)
+ goto skip_
filter
s;
if (S_ISDIR(st.st_mode) && !xfer_dirs) {
rprintf(FINFO, "skipping directory %s\n", thisname);
if (S_ISDIR(st.st_mode) && !xfer_dirs) {
rprintf(FINFO, "skipping directory %s\n", thisname);
@@
-832,7
+830,7
@@
struct file_struct *make_file(char *fname, struct file_list *flist,
&& S_ISDIR(st.st_mode))
flags |= FLAG_MOUNT_POINT;
&& 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;
if (lp_ignore_nonreadable(module_id)) {
@@
-843,11
+841,11
@@
struct file_struct *make_file(char *fname, struct file_list *flist,
return NULL;
}
return NULL;
}
-skip_
exclude
s:
+skip_
filter
s:
if (verbose > 2) {
rprintf(FINFO, "[%s] make_file(%s,*,%d)\n",
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) {
}
if ((basename = strrchr(thisname, '/')) != NULL) {
@@
-983,7
+981,7
@@
void send_file_name(int f, struct file_list *flist, char *fname,
/* f is set to -1 when calculating deletion file list */
file = make_file(fname, flist,
/* f is set to -1 when calculating deletion file list */
file = make_file(fname, flist,
- f == -1 && delete_excluded? SERVER_
EXCLUDES : ALL_EXCLUDE
S);
+ f == -1 && delete_excluded? SERVER_
FILTERS : ALL_FILTER
S);
if (!file)
return;
if (!file)
return;
@@
-1012,7
+1010,7
@@
static void send_directory(int f, struct file_list *flist, char *dir)
struct dirent *di;
char fname[MAXPATHLEN];
unsigned int offset;
struct dirent *di;
char fname[MAXPATHLEN];
unsigned int offset;
- void *save_
exclude
s;
+ void *save_
filter
s;
char *p;
d = opendir(dir);
char *p;
d = opendir(dir);
@@
-1036,7
+1034,7
@@
static void send_directory(int f, struct file_list *flist, char *dir)
offset++;
}
offset++;
}
- save_
excludes = push_local_exclude
s(fname, offset);
+ save_
filters = push_local_filter
s(fname, offset);
for (errno = 0, di = readdir(d); di; errno = 0, di = readdir(d)) {
char *dname = d_name(di);
for (errno = 0, di = readdir(d); di; errno = 0, di = readdir(d)) {
char *dname = d_name(di);
@@
-1058,7
+1056,7
@@
static void send_directory(int f, struct file_list *flist, char *dir)
rsyserr(FERROR, errno, "readdir(%s)", dir);
}
rsyserr(FERROR, errno, "readdir(%s)", dir);
}
- pop_local_
excludes(save_exclude
s);
+ pop_local_
filters(save_filter
s);
closedir(d);
}
closedir(d);
}
@@
-1101,7
+1099,7
@@
struct file_list *send_file_list(int f, int argc, char *argv[])
}
use_ff_fd = 1;
if (curr_dir_len < MAXPATHLEN - 1) {
}
use_ff_fd = 1;
if (curr_dir_len < MAXPATHLEN - 1) {
- push_local_
exclude
s(curr_dir, curr_dir_len);
+ push_local_
filter
s(curr_dir, curr_dir_len);
need_first_push = False;
}
}
need_first_push = False;
}
}
@@
-1145,9
+1143,9
@@
struct file_list *send_file_list(int f, int argc, char *argv[])
if (need_first_push) {
if ((p = strrchr(fname, '/')) != NULL) {
if (*++p && strcmp(p, ".") != 0)
if (need_first_push) {
if ((p = strrchr(fname, '/')) != NULL) {
if (*++p && strcmp(p, ".") != 0)
- push_local_
exclude
s(fname, p - fname);
+ push_local_
filter
s(fname, p - fname);
} else if (strcmp(fname, ".") != 0)
} else if (strcmp(fname, ".") != 0)
- push_local_
exclude
s(fname, 0);
+ push_local_
filter
s(fname, 0);
need_first_push = False;
}
need_first_push = False;
}
@@
-1726,8
+1724,10
@@
void delete_in_dir(struct file_list *flist, char *fname)
safe_fname(f));
}
} else {
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++;
}
}
deletion_count++;
}