aboutsummaryrefslogtreecommitdiffstats
path: root/progress.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2008-07-05 00:21:05 -0700
committerWayne Davison <wayned@samba.org>2008-07-05 00:31:46 -0700
commitbb4e4d889f51065dcef6f34d8ba4a80c051149a1 (patch)
tree2b94439eb059cc33a1862da2d988737e3b4a8619 /progress.c
parent93f3fbf73e2e2b1c2560482fb395c3f9a6835fc8 (diff)
downloadandroid_external_rsync-bb4e4d889f51065dcef6f34d8ba4a80c051149a1.tar.gz
android_external_rsync-bb4e4d889f51065dcef6f34d8ba4a80c051149a1.tar.bz2
android_external_rsync-bb4e4d889f51065dcef6f34d8ba4a80c051149a1.zip
The --progress output now leaves the cursor at the end of the line
(instead of the start) in order to be extra sure that an error won't overwrite it. We also ensure that the progress option can't be enabled on the server side.
Diffstat (limited to 'progress.c')
-rw-r--r--progress.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/progress.c b/progress.c
index 86f8ea13..25033b8b 100644
--- a/progress.c
+++ b/progress.c
@@ -71,6 +71,11 @@ static void rprint_progress(OFF_T ofs, OFF_T size, struct timeval *now,
double rate, remain;
if (is_last) {
+ snprintf(eol, sizeof eol,
+ " (xfer#%d, to-check=%d/%d)\n",
+ stats.num_transferred_files,
+ stats.num_files - current_file_index - 1,
+ stats.num_files);
/* Compute stats based on the starting info. */
if (!ph_start.time.tv_sec
|| !(diff = msdiff(&ph_start.time, now)))
@@ -79,6 +84,7 @@ static void rprint_progress(OFF_T ofs, OFF_T size, struct timeval *now,
/* Switch to total time taken for our last update. */
remain = (double) diff / 1000.0;
} else {
+ strlcpy(eol, " ", sizeof eol);
/* Compute stats based on recent progress. */
if (!(diff = msdiff(&ph_list[oldest_hpos].time, now)))
diff = 1;
@@ -106,18 +112,13 @@ static void rprint_progress(OFF_T ofs, OFF_T size, struct timeval *now,
(int) remain % 60);
}
- if (is_last) {
- snprintf(eol, sizeof eol, " (xfer#%d, to-check=%d/%d)\n",
- stats.num_transferred_files,
- stats.num_files - current_file_index - 1,
- stats.num_files);
- } else
- strlcpy(eol, "\r", sizeof eol);
progress_is_active = 0;
- rprintf(FCLIENT, "%12s %3d%% %7.2f%s %s%s",
+ rprintf(FCLIENT, "\r%12s %3d%% %7.2f%s %s%s",
human_num(ofs), pct, rate, units, rembuf, eol);
- if (!is_last)
+ if (!is_last) {
progress_is_active = 1;
+ fflush(stdout);
+ }
}
void set_current_file_index(struct file_struct *file, int ndx)