X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/4c36ddbeecdde407c870109d70527640ca127ace..b72f24c7190fde1c15662d52c8d62789bd2086ad:/main.c diff --git a/main.c b/main.c index 056863ff..6fd96a7c 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,46 @@ 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)); } @@ -149,8 +171,8 @@ static char *get_local_name(struct file_list *flist,char *name) if (do_stat(name,&st) == 0) { if (S_ISDIR(st.st_mode)) { - if (chdir(name) != 0) { - rprintf(FERROR,"chdir %s : %s (1)\n", + if (!push_dir(name, 0)) { + rprintf(FERROR,"push_dir %s : %s (1)\n", name,strerror(errno)); exit_cleanup(1); } @@ -176,8 +198,9 @@ static char *get_local_name(struct file_list *flist,char *name) rprintf(FINFO,"created directory %s\n",name); } - if (chdir(name) != 0) { - rprintf(FERROR,"chdir %s : %s (2)\n",name,strerror(errno)); + if (!push_dir(name, 0)) { + rprintf(FERROR,"push_dir %s : %s (2)\n", + name,strerror(errno)); exit_cleanup(1); } @@ -198,8 +221,8 @@ static void do_server_sender(int f_in, int f_out, int argc,char *argv[]) if (verbose > 2) rprintf(FINFO,"server_sender starting pid=%d\n",(int)getpid()); - if (!relative_paths && chdir(dir) != 0) { - rprintf(FERROR,"chdir %s: %s (3)\n",dir,strerror(errno)); + if (!relative_paths && !push_dir(dir, 0)) { + rprintf(FERROR,"push_dir %s: %s (3)\n",dir,strerror(errno)); exit_cleanup(1); } argc--; @@ -289,8 +312,8 @@ static void do_server_recv(int f_in, int f_out, int argc,char *argv[]) dir = argv[0]; argc--; argv++; - if (!am_daemon && chdir(dir) != 0) { - rprintf(FERROR,"chdir %s : %s (4)\n", + if (!am_daemon && !push_dir(dir, 0)) { + rprintf(FERROR,"push_dir %s : %s (4)\n", dir,strerror(errno)); exit_cleanup(1); } @@ -497,6 +520,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);