X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/92d021488ec06524f7ed6a527c39f2753f4a9fd2..3b22184d4c61e6dc77ec15f93bb760046c40533e:/generator.c diff --git a/generator.c b/generator.c index 33b7ce2a..b12087fc 100644 --- a/generator.c +++ b/generator.c @@ -289,7 +289,7 @@ static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev) rprintf(FINFO, "delete_in_dir(%s)\n", fbuf); if (allowed_lull) - maybe_send_keepalive(time(NULL), True); + maybe_send_keepalive(time(NULL), MSK_ALLOW_FLUSH); if (io_error && !ignore_errors) { if (already_warned) @@ -567,6 +567,12 @@ static void sum_sizes_sqroot(struct sum_struct *sum, int64 len) int s2length; int64 l; + if (len < 0) { + /* The file length overflowed our int64 var, so we can't process this file. */ + sum->count = -1; /* indicate overflow error */ + return; + } + if (block_size) blength = block_size; else if (len <= BLOCK_SIZE * BLOCK_SIZE) @@ -1032,7 +1038,7 @@ static void list_file_entry(struct file_struct *f) #ifdef SUPPORT_LINKS if (preserve_links && S_ISLNK(f->mode)) { rprintf(FINFO, "%s %*s %s %s -> %s\n", - permbuf, colwidth, comma_num(len), + permbuf, colwidth, human_num(len), timestring(f->modtime), f_name(f, NULL), F_SYMLINK(f)); } else @@ -1043,7 +1049,7 @@ static void list_file_entry(struct file_struct *f) f_name(f, NULL)); } else { rprintf(FINFO, "%s %*s %s %s\n", - permbuf, colwidth, comma_num(len), + permbuf, colwidth, human_num(len), timestring(f->modtime), f_name(f, NULL)); } } @@ -1119,6 +1125,7 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, skip_dir = NULL; } + init_stat_x(&sx); if (daemon_filter_list.head && (*fname != '.' || fname[1])) { if (check_filter(&daemon_filter_list, FLOG, fname, is_dir) < 0) { if (is_dir < 0) @@ -1136,7 +1143,6 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, } } - init_stat_x(&sx); if (dry_run > 1 || (dry_missing_dir && is_below(file, dry_missing_dir))) { parent_is_dry_missing: if (fuzzy_dirlist) { @@ -1354,11 +1360,14 @@ static void recv_generator(char *fname, struct file_struct *file, int ndx, const char *sl = F_SYMLINK(file); if (safe_symlinks && unsafe_symlink(sl, fname)) { if (INFO_GTE(NAME, 1)) { - if (solo_file) + if (solo_file) { + /* fname contains the destination path, but we + * want to report the source path. */ fname = f_name(file, NULL); + } rprintf(FINFO, - "ignoring unsafe symlink %s -> \"%s\"\n", - full_fname(fname), sl); + "ignoring unsafe symlink \"%s\" -> \"%s\"\n", + fname, sl); } return; } @@ -1928,7 +1937,7 @@ static void touch_up_dirs(struct file_list *flist, int ndx) } if (counter >= loopchk_limit) { if (allowed_lull) - maybe_send_keepalive(time(NULL), True); + maybe_send_keepalive(time(NULL), MSK_ALLOW_FLUSH); else maybe_flush_socket(0); counter = 0; @@ -2128,7 +2137,7 @@ void generate_files(int f_out, const char *local_name) if (i + cur_flist->ndx_start >= next_loopchk) { if (allowed_lull) - maybe_send_keepalive(time(NULL), True); + maybe_send_keepalive(time(NULL), MSK_ALLOW_FLUSH); else maybe_flush_socket(0); next_loopchk += loopchk_limit;