check whether there is a / before a : in the rsync command line. If
[rsync/rsync.git] / main.c
diff --git a/main.c b/main.c
index 3e39a85..2d1b35e 100644 (file)
--- a/main.c
+++ b/main.c
@@ -63,29 +63,29 @@ static void report(int f)
        }
 
        if (do_stats) {
-               printf("\nNumber of files: %d\n", stats.num_files);
-               printf("Number of files transferred: %d\n", 
+               rprintf(FINFO,"\nNumber of files: %d\n", stats.num_files);
+               rprintf(FINFO,"Number of files transferred: %d\n", 
                       stats.num_transferred_files);
-               printf("Total file size: %.0f bytes\n", 
+               rprintf(FINFO,"Total file size: %.0f bytes\n", 
                       (double)stats.total_size);
-               printf("Total transferred file size: %.0f bytes\n", 
+               rprintf(FINFO,"Total transferred file size: %.0f bytes\n", 
                       (double)stats.total_transferred_size);
-               printf("Literal data: %.0f bytes\n", 
+               rprintf(FINFO,"Literal data: %.0f bytes\n", 
                       (double)stats.literal_data);
-               printf("Matched data: %.0f bytes\n", 
+               rprintf(FINFO,"Matched data: %.0f bytes\n", 
                       (double)stats.matched_data);
-               printf("File list size: %d\n", stats.flist_size);
-               printf("Total bytes written: %.0f\n", 
+               rprintf(FINFO,"File list size: %d\n", stats.flist_size);
+               rprintf(FINFO,"Total bytes written: %.0f\n", 
                       (double)stats.total_written);
-               printf("Total bytes read: %.0f\n\n", 
+               rprintf(FINFO,"Total bytes read: %.0f\n\n", 
                       (double)stats.total_read);
        }
        
-       printf("wrote %.0f bytes  read %.0f bytes  %.2f bytes/sec\n",
+       rprintf(FINFO,"wrote %.0f bytes  read %.0f bytes  %.2f bytes/sec\n",
               (double)stats.total_written,
               (double)stats.total_read,
               (stats.total_written+stats.total_read)/(0.5 + (t-starttime)));
-       printf("total size is %.0f  speedup is %.2f\n",
+       rprintf(FINFO,"total size is %.0f  speedup is %.2f\n",
               (double)stats.total_size,
               (1.0*stats.total_size)/(stats.total_written+stats.total_read));
 
@@ -292,9 +292,6 @@ static int do_recv(int f_in,int f_out,struct file_list *flist,char *local_name)
                recv_files(f_in,flist,local_name,recv_pipe[1]);
                report(f_in);
 
-               if (verbose > 3)
-                       rprintf(FINFO,"do_recv waiting on %d\n",pid);
-
                io_flush();
                _exit(0);
        }
@@ -435,6 +432,20 @@ int client_run(int f_in, int f_out, int pid, int argc, char *argv[])
        return status | status2;
 }
 
+static char *find_colon(char *s)
+{
+       char *p, *p2;
+
+       p = strchr(s,':');
+       if (!p) return NULL;
+       
+       /* now check to see if there is a / in the string before the : - if there is then
+          discard the colon on the assumption that the : is part of a filename */
+       p2 = strchr(s,'/');
+       if (p2 && p2 < p) return NULL;
+
+       return p;
+}
 
 static int start_client(int argc, char *argv[])
 {
@@ -448,7 +459,7 @@ static int start_client(int argc, char *argv[])
        extern int am_sender;
        extern char *shell_cmd;
 
-       p = strchr(argv[0],':');
+       p = find_colon(argv[0]);
 
        if (p) {
                if (p[1] == ':') {
@@ -470,7 +481,7 @@ static int start_client(int argc, char *argv[])
        } else {
                am_sender = 1;
 
-               p = strchr(argv[argc-1],':');
+               p = find_colon(argv[argc-1]);
                if (!p) {
                        local_server = 1;
                } else if (p[1] == ':') {
@@ -518,11 +529,6 @@ static int start_client(int argc, char *argv[])
        
        pid = do_cmd(shell_cmd,shell_machine,shell_user,shell_path,&f_in,&f_out);
        
-#if HAVE_SETLINEBUF
-       setlinebuf(stdout);
-       setlinebuf(stderr);
-#endif
-
        ret = client_run(f_in, f_out, pid, argc, argv);
 
        fflush(stdout);