X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/53593085cf6dbaa141c3b8f45e1883523a8cfe8b..aac5cab80b9d4fc0adff2b72aeba2406176930ae:/receiver.c diff --git a/receiver.c b/receiver.c index 986c5fe5..7bf14c7d 100644 --- a/receiver.c +++ b/receiver.c @@ -82,7 +82,7 @@ static int updating_basis; * As long as it's unique, rsync will work. */ -static int get_tmpname(char *fnametmp, char *fname) +int get_tmpname(char *fnametmp, char *fname) { int maxname, added, length = 0; char *f; @@ -279,11 +279,11 @@ static void discard_receive_data(int f_in, OFF_T length) static void handle_delayed_updates(struct file_list *flist, char *local_name) { - char *fname, *partialptr, numbuf[4]; - int i; + char *fname, *partialptr; + int ndx; - for (i = -1; (i = bitbag_next_bit(delayed_bits, i)) >= 0; ) { - struct file_struct *file = flist->files[i]; + for (ndx = -1; (ndx = bitbag_next_bit(delayed_bits, ndx)) >= 0; ) { + struct file_struct *file = flist->files[ndx]; fname = local_name ? local_name : f_name(file, NULL); if ((partialptr = partial_dir_fname(fname)) != NULL) { if (make_backups && !make_backup(fname)) @@ -300,31 +300,28 @@ static void handle_delayed_updates(struct file_list *flist, char *local_name) full_fname(fname), partialptr); } else { if (remove_source_files - || (preserve_hard_links - && file->link_u.links)) { - SIVAL(numbuf, 0, i); - send_msg(MSG_SUCCESS,numbuf,4); - } + || (preserve_hard_links && F_IS_HLINKED(file))) + send_msg_int(MSG_SUCCESS, ndx); handle_partial_dir(partialptr, PDIR_DELETE); } } } } -static int get_next_gen_i(int batch_gen_fd, int next_gen_i, int desired_i) +static int get_next_gen_ndx(int batch_gen_fd, int next_gen_ndx, int desired_ndx) { - while (next_gen_i < desired_i) { - if (next_gen_i >= 0) { + while (next_gen_ndx < desired_ndx) { + if (next_gen_ndx >= 0) { rprintf(FINFO, "(No batched update for%s \"%s\")\n", phase ? " resend of" : "", - f_name(the_file_list->files[next_gen_i], NULL)); + f_name(the_file_list->files[next_gen_ndx], NULL)); } - next_gen_i = read_int(batch_gen_fd); - if (next_gen_i == -1) - next_gen_i = the_file_list->count; + next_gen_ndx = read_int(batch_gen_fd); + if (next_gen_ndx == -1) + next_gen_ndx = the_file_list->count; } - return next_gen_i; + return next_gen_ndx; } @@ -334,14 +331,14 @@ static int get_next_gen_i(int batch_gen_fd, int next_gen_i, int desired_i) * Receiver process runs on the same host as the generator process. */ int recv_files(int f_in, struct file_list *flist, char *local_name) { - int next_gen_i = -1; + int next_gen_ndx = -1; int fd1,fd2; STRUCT_STAT st; int iflags, xlen; char *fname, fbuf[MAXPATHLEN]; char xname[MAXPATHLEN]; char fnametmp[MAXPATHLEN]; - char *fnamecmp, *partialptr, numbuf[4]; + char *fnamecmp, *partialptr; char fnamecmpbuf[MAXPATHLEN]; uchar fnamecmp_type; struct file_struct *file; @@ -350,15 +347,10 @@ int recv_files(int f_in, struct file_list *flist, char *local_name) int itemizing = am_server ? logfile_format_has_i : stdout_format_has_i; enum logcode log_code = log_before_transfer ? FLOG : FINFO; int max_phase = protocol_version >= 29 ? 2 : 1; - int i, recv_ok; + int ndx, recv_ok; if (verbose > 2) - rprintf(FINFO,"recv_files(%d) starting\n",flist->count); - - if (flist->hlink_pool) { - pool_destroy(flist->hlink_pool); - flist->hlink_pool = NULL; - } + rprintf(FINFO, "recv_files(%d) starting\n", flist->count); if (delay_updates) delayed_bits = bitbag_create(flist->count); @@ -368,12 +360,12 @@ int recv_files(int f_in, struct file_list *flist, char *local_name) while (1) { cleanup_disable(); - i = read_int(f_in); - if (i == -1) { + ndx = read_int(f_in); + if (ndx == NDX_DONE) { if (read_batch) { - get_next_gen_i(batch_gen_fd, next_gen_i, - flist->count); - next_gen_i = -1; + get_next_gen_ndx(batch_gen_fd, next_gen_ndx, + flist->count); + next_gen_ndx = -1; } if (++phase > max_phase) break; @@ -392,12 +384,12 @@ int recv_files(int f_in, struct file_list *flist, char *local_name) continue; } - iflags = read_item_attrs(f_in, -1, i, &fnamecmp_type, + iflags = read_item_attrs(f_in, -1, ndx, &fnamecmp_type, xname, &xlen); if (iflags == ITEM_IS_NEW) /* no-op packet */ continue; - file = flist->files[i]; + file = flist->files[ndx]; fname = local_name ? local_name : f_name(file, fbuf); if (verbose > 2) @@ -414,9 +406,9 @@ int recv_files(int f_in, struct file_list *flist, char *local_name) exit_cleanup(RERR_PROTOCOL); } - stats.current_file_index = i; + stats.current_file_index = ndx; stats.num_transferred_files++; - stats.total_transferred_size += file->length; + stats.total_transferred_size += F_LENGTH(file); cleanup_got_literal = 0; if (server_filter_list.head @@ -428,26 +420,26 @@ int recv_files(int f_in, struct file_list *flist, char *local_name) if (!do_xfers) { /* log the transfer */ log_item(FCLIENT, file, &stats, iflags, NULL); if (read_batch) - discard_receive_data(f_in, file->length); + discard_receive_data(f_in, F_LENGTH(file)); continue; } if (write_batch < 0) { log_item(FINFO, file, &stats, iflags, NULL); if (!am_server) - discard_receive_data(f_in, file->length); + discard_receive_data(f_in, F_LENGTH(file)); continue; } if (read_batch) { - next_gen_i = get_next_gen_i(batch_gen_fd, next_gen_i, i); - if (i < next_gen_i) { + next_gen_ndx = get_next_gen_ndx(batch_gen_fd, next_gen_ndx, ndx); + if (ndx < next_gen_ndx) { rprintf(FINFO, "(Skipping batched update for \"%s\")\n", fname); - discard_receive_data(f_in, file->length); + discard_receive_data(f_in, F_LENGTH(file)); continue; } - next_gen_i = -1; + next_gen_ndx = -1; } partialptr = partial_dir ? partial_dir_fname(fname) : fname; @@ -526,7 +518,7 @@ int recv_files(int f_in, struct file_list *flist, char *local_name) } else if (do_fstat(fd1,&st) != 0) { rsyserr(FERROR, errno, "fstat %s failed", full_fname(fnamecmp)); - discard_receive_data(f_in, file->length); + discard_receive_data(f_in, F_LENGTH(file)); close(fd1); continue; } @@ -539,7 +531,7 @@ int recv_files(int f_in, struct file_list *flist, char *local_name) */ rprintf(FERROR,"recv_files: %s is a directory\n", full_fname(fnamecmp)); - discard_receive_data(f_in, file->length); + discard_receive_data(f_in, F_LENGTH(file)); close(fd1); continue; } @@ -562,14 +554,14 @@ int recv_files(int f_in, struct file_list *flist, char *local_name) if (fd2 == -1) { rsyserr(FERROR, errno, "open %s failed", full_fname(fname)); - discard_receive_data(f_in, file->length); + discard_receive_data(f_in, F_LENGTH(file)); if (fd1 != -1) close(fd1); continue; } } else { if (!get_tmpname(fnametmp,fname)) { - discard_receive_data(f_in, file->length); + discard_receive_data(f_in, F_LENGTH(file)); if (fd1 != -1) close(fd1); continue; @@ -595,7 +587,7 @@ int recv_files(int f_in, struct file_list *flist, char *local_name) if (fd2 == -1) { rsyserr(FERROR, errno, "mkstemp %s failed", full_fname(fnametmp)); - discard_receive_data(f_in, file->length); + discard_receive_data(f_in, F_LENGTH(file)); if (fd1 != -1) close(fd1); continue; @@ -612,7 +604,7 @@ int recv_files(int f_in, struct file_list *flist, char *local_name) /* recv file data */ recv_ok = receive_data(f_in, fnamecmp, fd1, st.st_size, - fname, fd2, file->length); + fname, fd2, F_LENGTH(file)); log_item(log_code, file, &initial_stats, iflags, NULL); @@ -643,7 +635,7 @@ int recv_files(int f_in, struct file_list *flist, char *local_name) finish_transfer(partialptr, fnametmp, NULL, file, recv_ok, !partial_dir); if (delay_updates && recv_ok) { - bitbag_set_bit(delayed_bits, i); + bitbag_set_bit(delayed_bits, ndx); recv_ok = -1; } } else { @@ -655,10 +647,8 @@ int recv_files(int f_in, struct file_list *flist, char *local_name) if (recv_ok > 0) { if (remove_source_files - || (preserve_hard_links && file->link_u.links)) { - SIVAL(numbuf, 0, i); - send_msg(MSG_SUCCESS, numbuf, 4); - } + || (preserve_hard_links && F_IS_HLINKED(file))) + send_msg_int(MSG_SUCCESS, ndx); } else if (!recv_ok) { enum logcode msgtype = phase || read_batch ? FERROR : FINFO; if (msgtype == FERROR || verbose) { @@ -680,10 +670,8 @@ int recv_files(int f_in, struct file_list *flist, char *local_name) "%s: %s failed verification -- update %s%s.\n", errstr, fname, keptstr, redostr); } - if (!phase) { - SIVAL(numbuf, 0, i); - send_msg(MSG_REDO, numbuf, 4); - } + if (!phase) + send_msg_int(MSG_REDO, ndx); } } make_backups = save_make_backups;