Give the user an idea of how far along in the transfer we are
[rsync/rsync.git] / main.c
diff --git a/main.c b/main.c
index a7cf981..1b07eee 100644 (file)
--- a/main.c
+++ b/main.c
@@ -171,7 +171,7 @@ static void show_malloc_stats(void)
 
        mi = mallinfo();
 
-       rprintf(FINFO, RSYNC_NAME "[%d] (%s%s%s) heap statistics:\n",
+       rprintf(FINFO, "\n" RSYNC_NAME "[%d] (%s%s%s) heap statistics:\n",
                getpid(),
                am_server ? "server " : "",
                am_daemon ? "daemon " : "",
@@ -243,17 +243,13 @@ static pid_t do_cmd(char *cmd,char *machine,char *user,char *path,int *f_in,int
                args[argc++] = rsync_path;
 
                if (blocking_io < 0) {
-                       char *cp = getenv(RSYNC_RSH_IO_ENV);
-                       if (rsh_env && cp && strcmp(cmd, rsh_env) == 0)
-                               blocking_io = *cp == 'b' || *cp == 'B';
-                       else {
-                               if ((cp = strrchr(cmd, '/')) != NULL)
-                                       cp++;
-                               else
-                                       cp = cmd;
-                               if (strcmp(cp, "rsh") == 0 || strcmp(cp, "remsh") == 0)
-                                       blocking_io = 1;
-                       }
+                       char *cp;
+                       if ((cp = strrchr(cmd, '/')) != NULL)
+                               cp++;
+                       else
+                               cp = cmd;
+                       if (strcmp(cp, "rsh") == 0 || strcmp(cp, "remsh") == 0)
+                               blocking_io = 1;
                }
 
                server_options(args,&argc);
@@ -384,13 +380,15 @@ static void do_server_sender(int f_in, int f_out, int argc,char *argv[])
                exit_cleanup(0);
        }
 
+       io_start_buffering_in(f_in);
+       io_start_buffering_out(f_out);
        send_files(flist,f_out,f_in);
        io_flush();
        report(f_out);
        if (protocol_version >= 24) {
                /* final goodbye message */
-               read_int(f_in);
-       }
+               read_int(f_in);
+       }
        io_flush();
        exit_cleanup(0);
 }
@@ -458,7 +456,7 @@ static int do_recv(int f_in,int f_out,struct file_list *flist,char *local_name)
        close(error_pipe[1]);
        if (f_in != f_out) close(f_in);
 
-       io_start_buffering(f_out);
+       io_start_buffering_out(f_out);
 
        io_set_error_fd(error_pipe[0]);
 
@@ -512,6 +510,7 @@ static void do_server_recv(int f_in, int f_out, int argc,char *argv[])
                }
        }
 
+       io_start_buffering_in(f_in);
        if (delete_mode && !delete_excluded)
                recv_exclude_list(f_in);
 
@@ -610,18 +609,22 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[])
                extern int cvs_exclude;
                extern int delete_mode;
                extern int delete_excluded;
+               io_start_buffering_out(f_out);
                if (cvs_exclude)
                        add_cvs_excludes();
                if (delete_mode && !delete_excluded)
                        send_exclude_list(f_out);
                if (remote_filesfrom_file)
                        filesfrom_fd = f_in;
-               if (!read_batch) /*  dw -- don't write to pipe */
+               if (!read_batch) /* don't write to pipe */
                        flist = send_file_list(f_out,argc,argv);
                if (verbose > 3)
                        rprintf(FINFO,"file list sent\n");
 
+               io_flush();
+               io_start_buffering_out(f_out);
                send_files(flist,f_out,f_in);
+               io_flush();
                if (protocol_version >= 24) {
                        /* final goodbye message */
                        read_int(f_in);
@@ -633,6 +636,7 @@ int client_run(int f_in, int f_out, pid_t pid, int argc, char *argv[])
                        wait_process(pid, &status);
                }
                report(-1);
+               io_flush();
                exit_cleanup(status);
        }