X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/6d56efa6ea66afa2e6f4eb79d9dd5f3b54b723c3..fb01d1fb07f6efd3752ff895fe8a77e26a2b2055:/flist.c diff --git a/flist.c b/flist.c index 2cf72b1e..1f90403f 100644 --- a/flist.c +++ b/flist.c @@ -399,7 +399,9 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, 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; @@ -472,6 +474,17 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, 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) @@ -518,11 +531,13 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, 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)) { @@ -609,7 +624,9 @@ static void send_file_entry(int f, const char *fname, struct file_struct *file, write_buf(f, sum, checksum_len); } +#ifdef SUPPORT_HARD_LINKS the_end: +#endif strlcpy(lastname, fname, MAXPATHLEN); if (S_ISREG(mode) || S_ISLNK(mode)) @@ -713,6 +730,11 @@ static struct file_struct *recv_file_entry(struct file_list *flist, 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); @@ -2188,12 +2210,13 @@ struct file_list *recv_file_list(int f) 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; @@ -2408,14 +2431,16 @@ struct file_list *flist_new(int flags, char *msg) 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);