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
Use ftruncate() at the end of a --sparse file.
[rsync/rsync.git]
/
generator.c
diff --git
a/generator.c
b/generator.c
index
bec5c17
..
be36e63
100644
(file)
--- a/
generator.c
+++ b/
generator.c
@@
-390,12
+390,9
@@
static void do_delete_pass(void)
int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
{
int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
{
-#ifndef CAN_SET_SYMLINK_TIMES
- if (S_ISLNK(file->mode)) {
+ if (!(preserve_times & PRESERVE_LINK_TIMES) && S_ISLNK(file->mode)) {
;
;
- } else
-#endif
- if (preserve_times && cmp_time(sxp->st.st_mtime, file->modtime) != 0)
+ } else if (preserve_times && cmp_time(sxp->st.st_mtime, file->modtime) != 0)
return 0;
if (preserve_perms) {
return 0;
if (preserve_perms) {
@@
-437,12
+434,9
@@
void itemize(const char *fnamecmp, struct file_struct *file, int ndx, int statre
{
if (statret >= 0) { /* A from-dest-dir statret can == 1! */
int keep_time = !preserve_times ? 0
{
if (statret >= 0) { /* A from-dest-dir statret can == 1! */
int keep_time = !preserve_times ? 0
- : S_ISDIR(file->mode) ? preserve_times > 1 :
-#ifdef CAN_SET_SYMLINK_TIMES
- 1;
-#else
- !S_ISLNK(file->mode);
-#endif
+ : S_ISDIR(file->mode) ? preserve_times & PRESERVE_DIR_TIMES
+ : S_ISLNK(file->mode) ? preserve_times & PRESERVE_LINK_TIMES
+ : 1;
if (S_ISREG(file->mode) && F_LENGTH(file) != sxp->st.st_size)
iflags |= ITEM_REPORT_SIZE;
if (S_ISREG(file->mode) && F_LENGTH(file) != sxp->st.st_size)
iflags |= ITEM_REPORT_SIZE;
@@
-567,6
+561,12
@@
static void sum_sizes_sqroot(struct sum_struct *sum, int64 len)
int s2length;
int64 l;
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)
if (block_size)
blength = block_size;
else if (len <= BLOCK_SIZE * BLOCK_SIZE)
@@
-1032,7
+1032,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",
#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
timestring(f->modtime), f_name(f, NULL),
F_SYMLINK(f));
} else
@@
-1043,7
+1043,7
@@
static void list_file_entry(struct file_struct *f)
f_name(f, NULL));
} else {
rprintf(FINFO, "%s %*s %s %s\n",
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));
}
}
timestring(f->modtime), f_name(f, NULL));
}
}
@@
-1119,6
+1119,7
@@
static void recv_generator(char *fname, struct file_struct *file, int ndx,
skip_dir = NULL;
}
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)
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
+1137,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) {
if (dry_run > 1 || (dry_missing_dir && is_below(file, dry_missing_dir))) {
parent_is_dry_missing:
if (fuzzy_dirlist) {
@@
-1354,10
+1354,11
@@
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)) {
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);
/* 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",
fname, sl);
rprintf(FINFO,
"ignoring unsafe symlink \"%s\" -> \"%s\"\n",
fname, sl);
@@
-2049,7
+2050,7
@@
void generate_files(int f_out, const char *local_name)
}
solo_file = local_name;
dir_tweaking = !(list_only || solo_file || dry_run);
}
solo_file = local_name;
dir_tweaking = !(list_only || solo_file || dry_run);
- need_retouch_dir_times = preserve_times
> 1
;
+ need_retouch_dir_times = preserve_times
& PRESERVE_DIR_TIMES
;
loopchk_limit = allowed_lull ? allowed_lull * 5 : 200;
symlink_timeset_failed_flags = ITEM_REPORT_TIME
| (protocol_version >= 30 || !am_server ? ITEM_REPORT_TIMEFAIL : 0);
loopchk_limit = allowed_lull ? allowed_lull * 5 : 200;
symlink_timeset_failed_flags = ITEM_REPORT_TIME
| (protocol_version >= 30 || !am_server ? ITEM_REPORT_TIMEFAIL : 0);