X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/9497b0d4e9c25142568824e82400d012e35750bd..ef20efcbb69274e423321d7ac27bfe868bca65aa:/receiver.c diff --git a/receiver.c b/receiver.c index 1dfa96f0..b0a9ebd5 100644 --- a/receiver.c +++ b/receiver.c @@ -386,15 +386,9 @@ int recv_files(int f_in, struct file_list *flist, char *local_name, continue; } - if (i < 0 || i >= flist->count) { - /* Handle the new keep-alive (no-op) packet. */ - if (i == flist->count && protocol_version >= 29 - && read_shortint(f_in) == ITEM_IS_NEW) - continue; - rprintf(FERROR,"Invalid file index %d in recv_files (count=%d)\n", - i, flist->count); - exit_cleanup(RERR_PROTOCOL); - } + iflags = read_iflags(f_in, -1, i, fnametmp); + if (iflags == ITEM_IS_NEW) /* no-op packet */ + continue; file = flist->files[i]; fname = local_name ? local_name : f_name_to(file, fbuf); @@ -402,26 +396,9 @@ int recv_files(int f_in, struct file_list *flist, char *local_name, if (verbose > 2) rprintf(FINFO, "recv_files(%s)\n", safe_fname(fname)); - if (protocol_version >= 29) { - iflags = read_shortint(f_in); - if (!(iflags & ITEM_UPDATING) || !S_ISREG(file->mode)) { - int see_item = itemizing && (iflags || verbose > 1); - if (am_server) { - if (am_daemon && !dry_run && see_item) - log_item(file, &stats, iflags, NULL); - } else if (see_item || iflags & ITEM_UPDATING - || (S_ISDIR(file->mode) - && iflags & ITEM_REPORT_TIME)) - log_item(file, &stats, iflags, NULL); - continue; - } - } else - iflags = ITEM_UPDATING | ITEM_MISSING_DATA; - - if (!S_ISREG(file->mode)) { - rprintf(FERROR, "[%s] got index of non-regular file: %d\n", - who_am_i(), i); - exit_cleanup(RERR_PROTOCOL); + if (!(iflags & ITEM_TRANSFER)) { + maybe_log_item(file, iflags, itemizing, fnametmp); + continue; } stats.current_file_index = i; @@ -621,14 +598,14 @@ int recv_files(int f_in, struct file_list *flist, char *local_name, cleanup_disable(); - if (recv_ok) { - if (remove_sent_files && recv_ok > 0) { + if (recv_ok > 0) { + if (remove_sent_files + || (preserve_hard_links && file->link_u.links)) { SIVAL(numbuf, 0, i); send_msg(MSG_SUCCESS, numbuf, 4); } - } else { - int msgtype = csum_length == SUM_LENGTH || read_batch ? - FERROR : FINFO; + } else if (!recv_ok) { + int msgtype = phase || read_batch ? FERROR : FINFO; if (msgtype == FERROR || verbose) { char *errstr, *redostr, *keptstr; if (!(keep_partial && partialptr) && !inplace) @@ -649,7 +626,7 @@ int recv_files(int f_in, struct file_list *flist, char *local_name, errstr, safe_fname(fname), keptstr, redostr); } - if (csum_length != SUM_LENGTH) { + if (!phase) { SIVAL(numbuf, 0, i); send_msg(MSG_REDO, numbuf, 4); } @@ -676,7 +653,9 @@ int recv_files(int f_in, struct file_list *flist, char *local_name, full_fname(fname), safe_fname(partialptr)); } else { - if (remove_sent_files) { + if (remove_sent_files + || (preserve_hard_links + && file->link_u.links)) { SIVAL(numbuf, 0, i); send_msg(MSG_SUCCESS,numbuf,4); }