}
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));
argv[0] = ".";
}
+ set_nonblocking(f_out);
+ if (f_in != f_out)
+ set_nonblocking(f_in);
+
flist = send_file_list(f_out,argc,argv);
if (!flist || flist->count == 0) {
exit_cleanup(0);
}
- set_nonblocking(f_out);
- if (f_in != f_out)
- set_nonblocking(f_in);
-
send_files(flist,f_out,f_in);
report(f_out);
io_flush();
if (f_in != f_out) close(f_out);
set_nonblocking(f_in);
+ set_nonblocking(recv_pipe[1]);
recv_files(f_in,flist,local_name,recv_pipe[1]);
report(f_in);
if (f_in != f_out) close(f_in);
set_nonblocking(f_out);
+ set_nonblocking(recv_pipe[0]);
io_start_buffering(f_out);
extern int cvs_exclude;
extern int am_sender;
+ set_nonblocking(f_out);
+ if (f_in != f_out)
+ set_nonblocking(f_in);
+
setup_protocol(f_out, f_in);
-
+
if (am_sender) {
recv_exclude_list(f_in);
if (cvs_exclude)
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[])
{
extern int am_sender;
extern char *shell_cmd;
- p = strchr(argv[0],':');
+ p = find_colon(argv[0]);
if (p) {
if (p[1] == ':') {
} else {
am_sender = 1;
- p = strchr(argv[argc-1],':');
+ p = find_colon(argv[argc-1]);
if (!p) {
local_server = 1;
} else if (p[1] == ':') {
carried across */
orig_umask = (int)umask(0);
- parse_arguments(argc, argv);
+ if (!parse_arguments(argc, argv)) {
+ exit_cleanup(1);
+ }
argc -= optind;
argv += optind;