X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/5243c216d6db4c728c7bf0ad7ab769c9bb6a728b..704f908eae2008475e3aba005331e69c98c52234:/main.c diff --git a/main.c b/main.c index fa4fe0f7..217ddf41 100644 --- a/main.c +++ b/main.c @@ -20,7 +20,8 @@ #include "rsync.h" time_t starttime = 0; -int64 total_size = 0; + +struct stats stats; extern int csum_length; @@ -28,16 +29,17 @@ extern int verbose; static void report(int f) { - int64 in,out,tsize; time_t t = time(NULL); extern int am_server; extern int am_sender; extern int am_daemon; + extern int do_stats; if (am_daemon) { syslog(LOG_INFO,"wrote %.0f bytes read %.0f bytes total size %.0f\n", - (double)write_total(),(double)read_total(), - (double)total_size); + (double)stats.total_written, + (double)stats.total_read, + (double)stats.total_size); if (f == -1 || !am_sender) return; } @@ -46,26 +48,49 @@ static void report(int f) if (am_server && !am_sender) return; if (am_server && am_sender) { - write_longint(f,read_total()); - write_longint(f,write_total()); - write_longint(f,total_size); + write_longint(f,stats.total_read); + write_longint(f,stats.total_written); + write_longint(f,stats.total_size); return; } - if (am_sender) { - in = read_total(); - out = write_total(); - tsize = total_size; - } else { - out = read_longint(f); - in = read_longint(f); - tsize = read_longint(f); + if (!am_sender) { + int64 r; + stats.total_written = read_longint(f); + r = read_longint(f); + stats.total_size = read_longint(f); + stats.total_read = r; + } + + if (do_stats) { + printf("\nNumber of files: %d\n", stats.num_files); + printf("Number of files transferred: %d\n", + stats.num_transferred_files); + printf("Total file size: %.0f bytes\n", + (double)stats.total_size); + printf("Total transferred file size: %.0f bytes\n", + (double)stats.total_transferred_size); + printf("Literal data: %.0f bytes\n", + (double)stats.literal_data); + printf("Matched data: %.0f bytes\n", + (double)stats.matched_data); + printf("File list size: %d\n", stats.flist_size); + printf("Total bytes written: %.0f\n", + (double)stats.total_written); + printf("Total bytes read: %.0f\n\n", + (double)stats.total_read); } printf("wrote %.0f bytes read %.0f bytes %.2f bytes/sec\n", - (double)out,(double)in,(in+out)/(0.5 + (t-starttime))); + (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", - (double)tsize,(1.0*tsize)/(in+out)); + (double)stats.total_size, + (1.0*stats.total_size)/(stats.total_written+stats.total_read)); + + fflush(stdout); + fflush(stderr); } @@ -390,13 +415,13 @@ int client_run(int f_in, int f_out, int pid, int argc, char *argv[]) } -int start_client(int argc, char *argv[]) +static int start_client(int argc, char *argv[]) { char *p; char *shell_machine = NULL; char *shell_path = NULL; char *shell_user = NULL; - int pid; + int pid, ret; int f_in,f_out; extern int local_server; extern int am_sender; @@ -477,7 +502,12 @@ int start_client(int argc, char *argv[]) setlinebuf(stderr); #endif - return client_run(f_in, f_out, pid, argc, argv); + ret = client_run(f_in, f_out, pid, argc, argv); + + fflush(stdout); + fflush(stderr); + + return ret; } @@ -498,6 +528,8 @@ int main(int argc,char *argv[]) starttime = time(NULL); am_root = (getuid() == 0); + memset(&stats, 0, sizeof(stats)); + if (argc < 2) { usage(FERROR); exit_cleanup(1);