Tweaked a sentence.
[rsync/rsync.git] / main.c
diff --git a/main.c b/main.c
index 42f4a6f..c0196d2 100644 (file)
--- 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);
@@ -173,7 +175,7 @@ static void handle_stats(int f)
                        stats.flist_buildtime = read_longint(f);
                        stats.flist_xfertime = read_longint(f);
                }
-       } else if (write_batch && !am_server) {
+       } else if (write_batch) {
                /* The --read-batch process is going to be a client
                 * receiver, so we need to give it the stats. */
                write_longint(batch_fd, total_read);
@@ -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);
                        }
@@ -808,17 +807,16 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[])
        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)