extern int munge_symlinks;
extern int need_unsorted_flist;
extern int output_needs_newline;
+extern int sender_keeps_checksum;
extern int unsort_ndx;
extern struct stats stats;
extern char *filesfrom_host;
flist->malloced);
if (DEBUG_GTE(FLIST, 1) && flist->malloced != FLIST_START) {
- rprintf(FCLIENT, "[%s] expand file_list pointer array to %.0f bytes, did%s move\n",
+ rprintf(FCLIENT, "[%s] expand file_list pointer array to %s bytes, did%s move\n",
who_am_i(),
- (double)sizeof flist->files[0] * flist->malloced,
+ big_num(sizeof flist->files[0] * flist->malloced, 0),
(new_ptr == flist->files) ? " not" : "");
}
static gid_t gid;
static const char *user_name, *group_name;
static char lastname[MAXPATHLEN];
+#ifdef SUPPORT_HARD_LINKS
int first_hlink_ndx = -1;
+#endif
int l1, l2;
int xflags;
np->data = (void*)(long)(first_ndx + ndx + 1);
xflags |= XMIT_HLINK_FIRST;
}
+ if (DEBUG_GTE(HLINK, 1)) {
+ if (first_hlink_ndx >= 0) {
+ rprintf(FINFO, "[%s] #%d hard-links #%d (%sabbrev)\n",
+ who_am_i(), first_ndx + ndx, first_hlink_ndx,
+ first_hlink_ndx >= first_ndx ? "" : "un");
+ } else if (DEBUG_GTE(HLINK, 3)) {
+ rprintf(FINFO, "[%s] dev:inode for #%d is %s:%s\n",
+ who_am_i(), first_ndx + ndx,
+ big_num(tmp_dev, 0), big_num(tmp_ino, 0));
+ }
+ }
} else {
if (tmp_dev == dev) {
if (protocol_version >= 28)
write_byte(f, l2);
write_buf(f, fname + l1, l2);
+#ifdef SUPPORT_HARD_LINKS
if (first_hlink_ndx >= 0) {
write_varint(f, first_hlink_ndx);
if (first_hlink_ndx >= first_ndx)
goto the_end;
}
+#endif
write_varlong30(f, F_LENGTH(file), 3);
if (!(xflags & XMIT_SAME_TIME)) {
write_buf(f, sum, checksum_len);
}
+#ifdef SUPPORT_HARD_LINKS
the_end:
+#endif
strlcpy(lastname, fname, MAXPATHLEN);
if (S_ISREG(mode) || S_ISLNK(mode))
first_hlink_ndx, flist->ndx_start + flist->used);
exit_cleanup(RERR_PROTOCOL);
}
+ if (DEBUG_GTE(HLINK, 1)) {
+ rprintf(FINFO, "[%s] #%d hard-links #%d (%sabbrev)\n",
+ who_am_i(), flist->used+flist->ndx_start, first_hlink_ndx,
+ first_hlink_ndx >= flist->ndx_start ? "" : "un");
+ }
if (first_hlink_ndx >= flist->ndx_start) {
struct file_struct *first = flist->files[first_hlink_ndx - flist->ndx_start];
file_length = F_LENGTH(first);
extra_len += EXTRA_LEN;
#endif
+ if (always_checksum && am_sender && S_ISREG(st.st_mode)) {
+ file_checksum(thisname, tmp_sum, st.st_size);
+ if (sender_keeps_checksum)
+ extra_len += SUM_EXTRA_CNT * EXTRA_LEN;
+ }
+
#if EXTRA_ROUNDING > 0
if (extra_len & (EXTRA_ROUNDING * EXTRA_LEN))
extra_len = (extra_len | (EXTRA_ROUNDING * EXTRA_LEN)) + EXTRA_LEN;
memcpy(bp + basename_len, linkname, linkname_len);
#endif
- if (always_checksum && am_sender && S_ISREG(st.st_mode))
- file_checksum(thisname, tmp_sum, st.st_size);
-
if (am_sender)
F_PATHNAME(file) = pathname;
else if (!pool)
return NULL;
}
+ if (sender_keeps_checksum && S_ISREG(st.st_mode))
+ memcpy(F_SUM(file), tmp_sum, checksum_len);
+
if (unsort_ndx)
F_NDX(file) = dir_count;
int dstart, flags;
int64 start_read;
- if (!first_flist)
+ if (!first_flist) {
+ if (show_filelist_p())
+ start_filelist_progress("receiving file list");
+ else if (inc_recurse && INFO_GTE(FLIST, 1) && !am_server)
+ rprintf(FCLIENT, "receiving incremental file list\n");
rprintf(FLOG, "receiving file list\n");
- if (show_filelist_p())
- start_filelist_progress("receiving file list");
- else if (inc_recurse && INFO_GTE(FLIST, 1) && !am_server && !first_flist)
- rprintf(FCLIENT, "receiving incremental file list\n");
+ }
start_read = stats.total_read;
if (flags & FLIST_TEMP) {
if (!(flist->file_pool = pool_create(SMALL_EXTENT, 0,
- out_of_memory, POOL_INTERN)))
+ out_of_memory,
+ POOL_INTERN)))
out_of_memory(msg);
} else {
/* This is a doubly linked list with prev looping back to
* the end of the list, but the last next pointer is NULL. */
if (!first_flist) {
flist->file_pool = pool_create(NORMAL_EXTENT, 0,
- out_of_memory, POOL_INTERN);
+ out_of_memory,
+ POOL_INTERN);
if (!flist->file_pool)
out_of_memory(msg);
} else
root = dir = slash = name = trail = "";
rprintf(FINFO,
- "[%s] i=%d %s %s%s%s%s mode=0%o len=%.0f%s%s flags=%x\n",
+ "[%s] i=%d %s %s%s%s%s mode=0%o len=%s%s%s flags=%x\n",
who, i + flist->ndx_start,
root, dir, slash, name, trail,
- (int)file->mode, (double)F_LENGTH(file),
+ (int)file->mode, big_num(F_LENGTH(file), 0),
uidbuf, gidbuf, file->flags);
}
}