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
Improve error handling and get rid of a lingering fprintf().
[rsync/rsync.git]
/
flist.c
diff --git
a/flist.c
b/flist.c
index
2af7e88
..
8b08ff6
100644
(file)
--- a/
flist.c
+++ b/
flist.c
@@
-79,8
+79,8
@@
extern char curr_dir[MAXPATHLEN];
extern struct chmod_mode_struct *chmod_modes;
extern struct chmod_mode_struct *chmod_modes;
-extern
struct filter_list_struc
t filter_list;
-extern
struct filter_list_struc
t daemon_filter_list;
+extern
filter_rule_lis
t filter_list;
+extern
filter_rule_lis
t daemon_filter_list;
#ifdef ICONV_OPTION
extern int filesfrom_convert;
#ifdef ICONV_OPTION
extern int filesfrom_convert;
@@
-97,6
+97,7
@@
struct file_list *cur_flist, *first_flist, *dir_flist;
int send_dir_ndx = -1, send_dir_depth = -1;
int flist_cnt = 0; /* how many (non-tmp) file list objects exist */
int file_total = 0; /* total of all active items over all file-lists */
int send_dir_ndx = -1, send_dir_depth = -1;
int flist_cnt = 0; /* how many (non-tmp) file list objects exist */
int file_total = 0; /* total of all active items over all file-lists */
+int file_old_total = 0; /* total of active items that will soon be gone */
int flist_eof = 0; /* all the file-lists are now known */
#define NORMAL_NAME 0
int flist_eof = 0; /* all the file-lists are now known */
#define NORMAL_NAME 0
@@
-195,7
+196,7
@@
static int readlink_stat(const char *path, STRUCT_STAT *stp, char *linkbuf)
if (link_stat(path, stp, copy_dirlinks) < 0)
return -1;
if (S_ISLNK(stp->st_mode)) {
if (link_stat(path, stp, copy_dirlinks) < 0)
return -1;
if (S_ISLNK(stp->st_mode)) {
- int llen = readlink(path, linkbuf, MAXPATHLEN - 1);
+ int llen =
do_
readlink(path, linkbuf, MAXPATHLEN - 1);
if (llen < 0)
return -1;
linkbuf[llen] = '\0';
if (llen < 0)
return -1;
linkbuf[llen] = '\0';
@@
-1476,6
+1477,7
@@
static struct file_struct *send_file_name(int f, struct file_list *flist,
#endif
#ifdef SUPPORT_XATTRS
if (preserve_xattrs) {
#endif
#ifdef SUPPORT_XATTRS
if (preserve_xattrs) {
+ sx.st.st_mode = file->mode;
if (get_xattr(fname, &sx) < 0) {
io_error |= IOERR_GENERAL;
return NULL;
if (get_xattr(fname, &sx) < 0) {
io_error |= IOERR_GENERAL;
return NULL;
@@
-1743,7
+1745,7
@@
static void send_implied_dirs(int f, struct file_list *flist, char *fname,
item_list *relname_list;
relnamecache **rnpp;
int len, need_new_dir, depth = 0;
item_list *relname_list;
relnamecache **rnpp;
int len, need_new_dir, depth = 0;
-
struct filter_list_struc
t save_filter_list = filter_list;
+
filter_rule_lis
t save_filter_list = filter_list;
flags = (flags | FLAG_IMPLIED_DIR) & ~(FLAG_TOP_DIR | FLAG_CONTENT_DIR);
filter_list.head = filter_list.tail = NULL; /* Don't filter implied dirs. */
flags = (flags | FLAG_IMPLIED_DIR) & ~(FLAG_TOP_DIR | FLAG_CONTENT_DIR);
filter_list.head = filter_list.tail = NULL; /* Don't filter implied dirs. */
@@
-1904,17
+1906,17
@@
void send_extra_file_list(int f, int at_least)
struct file_list *flist;
int64 start_write;
uint16 prev_flags;
struct file_list *flist;
int64 start_write;
uint16 prev_flags;
- int
old_cnt,
save_io_error = io_error;
+ int save_io_error = io_error;
if (flist_eof)
return;
if (flist_eof)
return;
+ if (at_least < 0)
+ at_least = file_total - file_old_total + 1;
+
/* Keep sending data until we have the requested number of
* files in the upcoming file-lists. */
/* Keep sending data until we have the requested number of
* files in the upcoming file-lists. */
- old_cnt = cur_flist->used;
- for (flist = first_flist; flist != cur_flist; flist = flist->next)
- old_cnt += flist->used;
- while (file_total - old_cnt < at_least) {
+ while (file_total - file_old_total < at_least) {
struct file_struct *file = dir_flist->sorted[send_dir_ndx];
int dir_ndx, dstart = stats.num_dirs;
const char *pathname = F_PATHNAME(file);
struct file_struct *file = dir_flist->sorted[send_dir_ndx];
int dir_ndx, dstart = stats.num_dirs;
const char *pathname = F_PATHNAME(file);