Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
d7b6774
)
Output a non-existent-file error for server-excluded files instead of
author
Wayne Davison
<wayned@samba.org>
Tue, 18 Mar 2008 15:43:43 +0000
(08:43 -0700)
committer
Wayne Davison
<wayned@samba.org>
Tue, 18 Mar 2008 16:16:24 +0000
(09:16 -0700)
silently ignoring them.
flist.c
patch
|
blob
|
blame
|
history
diff --git
a/flist.c
b/flist.c
index
dd3b3b1
..
8eaebd1
100644
(file)
--- a/
flist.c
+++ b/
flist.c
@@
-232,10
+232,20
@@
int link_stat(const char *path, STRUCT_STAT *stp, int follow_dirlinks)
#endif
}
#endif
}
+static inline int is_daemon_excluded(const char *fname, int is_dir)
+{
+ if (server_filter_list.head
+ && check_filter(&server_filter_list, fname, is_dir) < 0) {
+ errno = ENOENT;
+ return 1;
+ }
+ return 0;
+}
+
/* 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
* filter_level is set to either SERVER_FILTERS or ALL_FILTERS. */
/* 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
* filter_level is set to either SERVER_FILTERS or ALL_FILTERS. */
-static int is_excluded(char *fname, int is_dir, int filter_level)
+static int is_excluded(c
onst c
har *fname, int is_dir, int filter_level)
{
#if 0 /* This currently never happens, so avoid a useless compare. */
if (filter_level == NO_FILTERS)
{
#if 0 /* This currently never happens, so avoid a useless compare. */
if (filter_level == NO_FILTERS)
@@
-252,8
+262,7
@@
static int is_excluded(char *fname, int is_dir, int filter_level)
return 0;
}
}
return 0;
}
}
- if (server_filter_list.head
- && check_filter(&server_filter_list, fname, is_dir) < 0)
+ if (is_daemon_excluded(fname, is_dir))
return 1;
if (filter_level != ALL_FILTERS)
return 0;
return 1;
if (filter_level != ALL_FILTERS)
return 0;
@@
-1939,7
+1948,8
@@
struct file_list *send_file_list(int f, int argc, char *argv[])
if (fn != fbuf)
memmove(fbuf, fn, len + 1);
if (fn != fbuf)
memmove(fbuf, fn, len + 1);
- if (link_stat(fbuf, &st, copy_dirlinks || name_type != NORMAL_NAME) != 0) {
+ if (link_stat(fbuf, &st, copy_dirlinks || name_type != NORMAL_NAME) != 0
+ || is_daemon_excluded(fbuf, S_ISDIR(st.st_mode) != 0)) {
io_error |= IOERR_GENERAL;
rsyserr(FERROR_XFER, errno, "link_stat %s failed",
full_fname(fbuf));
io_error |= IOERR_GENERAL;
rsyserr(FERROR_XFER, errno, "link_stat %s failed",
full_fname(fbuf));