Tweaked a sentence.
[rsync/rsync.git] / main.c
diff --git a/main.c b/main.c
index 91f096a..c0196d2 100644 (file)
--- a/main.c
+++ b/main.c
@@ -20,6 +20,9 @@
 */
 
 #include "rsync.h"
+#if defined CONFIG_LOCALE && defined HAVE_LOCALE_H
+#include <locale.h>
+#endif
 
 extern int verbose;
 extern int dry_run;
@@ -160,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);
@@ -181,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",
@@ -209,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",
@@ -291,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);
                        }
@@ -591,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]);
@@ -764,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);
@@ -784,8 +786,8 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[])
                        io_flush(FULL_FLUSH);
                        wait_process(pid, &status);
                }
-               io_flush(FULL_FLUSH);
                output_summary();
+               io_flush(FULL_FLUSH);
                exit_cleanup(status);
        }
 
@@ -802,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)
@@ -1115,6 +1116,10 @@ int main(int argc,char *argv[])
         * see the EPIPE. */
        signal(SIGPIPE, SIG_IGN);
 
+#if defined CONFIG_LOCALE && defined HAVE_SETLOCALE
+       setlocale(LC_CTYPE, "");
+#endif
+
        /* Initialize push_dir here because on some old systems getcwd
         * (implemented by forking "pwd" and reading its output) doesn't
         * work when there are other child processes.  Also, on all systems
@@ -1123,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);
 
@@ -1142,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();