X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/3f0211b63a6cdc4a2cecfd2a0dffeba172c86a47..24ded29ff63d0adee798936ad20f21befcf8187b:/hlink.c diff --git a/hlink.c b/hlink.c index 1bc23d11..2a8b77eb 100644 --- a/hlink.c +++ b/hlink.c @@ -4,7 +4,7 @@ * Copyright (C) 1996 Andrew Tridgell * Copyright (C) 1996 Paul Mackerras * Copyright (C) 2002 Martin Pool - * Copyright (C) 2004-2007 Wayne Davison + * Copyright (C) 2004-2008 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@ extern int verbose; extern int dry_run; +extern int list_only; extern int am_sender; extern int inc_recurse; extern int do_xfers; @@ -142,7 +143,7 @@ static void match_gnums(int32 *ndx_list, int ndx_count) if (gnum != gnum_next) break; F_HL_PREV(file) = prev; - /* The linked list must use raw ndx values. */ + /* The linked list uses over-the-wire ndx values. */ if (unsort_ndx) prev = F_NDX(file); else @@ -174,23 +175,25 @@ static void match_gnums(int32 *ndx_list, int ndx_count) * to first when we're done. */ void match_hard_links(struct file_list *flist) { - int i, ndx_count = 0; - int32 *ndx_list; + if (!list_only) { + int i, ndx_count = 0; + int32 *ndx_list; - if (!(ndx_list = new_array(int32, flist->used))) - out_of_memory("match_hard_links"); + if (!(ndx_list = new_array(int32, flist->used))) + out_of_memory("match_hard_links"); - for (i = 0; i < flist->used; i++) { - if (F_IS_HLINKED(flist->sorted[i])) - ndx_list[ndx_count++] = i; - } + for (i = 0; i < flist->used; i++) { + if (F_IS_HLINKED(flist->sorted[i])) + ndx_list[ndx_count++] = i; + } - hlink_flist = flist; + hlink_flist = flist; - if (ndx_count) - match_gnums(ndx_list, ndx_count); + if (ndx_count) + match_gnums(ndx_list, ndx_count); - free(ndx_list); + free(ndx_list); + } if (protocol_version < 30) idev_destroy(); } @@ -272,13 +275,13 @@ int hard_link_check(struct file_struct *file, int ndx, const char *fname, if (!prev_name) { struct file_struct *prev_file = flist->files[prev_ndx - flist->ndx_start]; - /* Is the previous link is not complete yet? */ + /* Is the previous link not complete yet? */ if (!(prev_file->flags & FLAG_HLINK_DONE)) { /* Is the previous link being transferred? */ if (prev_file->flags & FLAG_FILE_SENT) { - /* Add ourselves to the list of files that will be - * updated when the transfer completes, and mark - * ourself as waiting for the transfer. */ + /* Add ourselves to the list of files that will + * be updated when the transfer completes, and + * mark ourself as waiting for the transfer. */ F_HL_PREV(file) = F_HL_PREV(prev_file); F_HL_PREV(prev_file) = ndx; file->flags |= FLAG_FILE_SENT; @@ -390,7 +393,7 @@ int hard_link_one(struct file_struct *file, const char *fname, enum logcode code; if (terse) { if (!verbose) - return -1; + return 0; code = FINFO; } else code = FERROR_XFER;