X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/d94015149671edfe80f8545024c6667f992abcaa..bdedced84b7f446f818efd4d25b8985285a50009:/main.c diff --git a/main.c b/main.c index 0c5fc57d..c0196d25 100644 --- a/main.c +++ b/main.c @@ -163,7 +163,9 @@ static void handle_stats(int f) /* this is the client */ - if (!am_sender) { + if (f < 0 && !am_sender) /* e.g. when we got an empty file list. */ + ; + else if (!am_sender) { /* Read the first two in opposite order because the meaning of * read/write swaps when switching from sender to receiver. */ total_written = read_longint(f); @@ -184,7 +186,10 @@ static void handle_stats(int f) write_longint(batch_fd, stats.flist_xfertime); } } +} +static void output_summary(void) +{ if (do_stats) { rprintf(FINFO,"\nNumber of files: %d\n", stats.num_files); rprintf(FINFO,"Number of files transferred: %d\n", @@ -212,12 +217,6 @@ static void handle_stats(int f) (double)total_read); } - fflush(stdout); - fflush(stderr); -} - -static void output_summary(void) -{ if (verbose || do_stats) { rprintf(FINFO, "\nsent %.0f bytes received %.0f bytes %.2f bytes/sec\n", @@ -294,7 +293,7 @@ static pid_t do_cmd(char *cmd, char *machine, char *user, char *path, for (tok = strtok(cmd, " "); tok; tok = strtok(NULL, " ")) { /* Comparison leaves rooms for server_options(). */ - if (argc >= MAX_ARGS - 100) { + if (argc >= MAX_ARGS - MAX_SERVER_ARGS) { rprintf(FERROR, "internal: args[] overflowed in do_cmd()\n"); exit_cleanup(RERR_SYNTAX); } @@ -594,7 +593,7 @@ static int do_recv(int f_in,int f_out,struct file_list *flist,char *local_name) am_generator = 1; close_multiplexing_in(); - if (write_batch) + if (write_batch && !am_server) stop_write_batch(); close(error_pipe[1]); @@ -767,7 +766,7 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[]) if (filesfrom_host) filesfrom_fd = f_in; - if (write_batch) + if (write_batch && !am_server) start_write_batch(f_out); flist = send_file_list(f_out, argc, argv); set_msg_fd_in(-1); @@ -805,20 +804,19 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[]) filesfrom_fd = -1; } - if (write_batch) + if (write_batch && !am_server) start_write_batch(f_in); flist = recv_file_list(f_in); - if (!flist || flist->count == 0) { - rprintf(FINFO, "client: nothing to do: " - "perhaps you need to specify some filenames or " - "the --recursive option?\n"); - exit_cleanup(0); - } the_file_list = flist; - local_name = get_local_name(flist,argv[0]); + if (flist && flist->count > 0) { + local_name = get_local_name(flist, argv[0]); - status2 = do_recv(f_in,f_out,flist,local_name); + status2 = do_recv(f_in, f_out, flist, local_name); + } else { + handle_stats(-1); + output_summary(); + } if (pid != -1) { if (verbose > 3) @@ -1130,7 +1128,7 @@ int main(int argc,char *argv[]) init_flist(); - if (write_batch || read_batch) { + if ((write_batch || read_batch) && !am_server) { if (write_batch) write_batch_shell_file(orig_argc, orig_argv, argc); @@ -1149,6 +1147,8 @@ int main(int argc,char *argv[]) if (read_batch) read_stream_flags(batch_fd); } + if (write_batch < 0) + dry_run = 1; if (am_daemon && !am_server) return daemon_main();