summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/file.c11
-rw-r--r--src/main.c39
2 files changed, 28 insertions, 22 deletions
diff --git a/src/file.c b/src/file.c
index aeb86f4..070b94e 100644
--- a/src/file.c
+++ b/src/file.c
@@ -487,6 +487,7 @@ struct chunk *chunk_acquire(struct list_head *chunk_list)
int chunk_prepare(struct chunk *c, sftp_session sftp)
{
+ char output[PATH_MAX + 32];
struct file *f = c->f;
int ret = 0;
@@ -496,6 +497,9 @@ int chunk_prepare(struct chunk *c, sftp_session sftp)
ret = -1;
goto out;
}
+ snprintf(output, sizeof(output), "\r\033[Kcopy start: %s\n", f->path);
+ fputs(output, stderr);
+ fflush(stderr);
f->state = FILE_STATE_OPENED;
}
@@ -727,6 +731,7 @@ int chunk_copy(struct chunk *c, sftp_session sftp, size_t sftp_buf_sz, size_t io
{
struct file *f = c->f;
int ret = 0;
+ char output[PATH_MAX + 16];
pr_debug("copy %s %s -> %s %s off=0x%010lx\n",
f->path, f->remote ? "(remote)" : "(local)",
@@ -746,8 +751,12 @@ int chunk_copy(struct chunk *c, sftp_session sftp, size_t sftp_buf_sz, size_t io
f->path, f->remote ? "(remote)" : "(local)",
f->dst_path, f->dst_remote ? "(remote)" : "(local)", c->off);
- if (refcnt_dec(&f->refcnt) == 0)
+ if (refcnt_dec(&f->refcnt) == 0) {
+ snprintf(output, sizeof(output), "\r\033[Kcopy done: %s\n", f->path);
+ fputs(output, stderr);
+ fflush(stderr);
f->state = FILE_STATE_DONE;
+ }
return ret;
}
diff --git a/src/main.c b/src/main.c
index 35fa07f..77f664d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -428,34 +428,31 @@ static void print_progress_bar(double percent, char *suffix)
* [=======> ] XX.X% SUFFIX
*/
+ buf[0] = '\0';
+
if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) < 0)
return; /* XXX */
+ bar_width = min(sizeof(buf), ws.ws_col) - strlen(suffix) - 8;
- fputs("\r\033[K", stderr);
-
- bar_width = ws.ws_col - strlen(suffix) - 8;
- if (bar_width < 0)
- goto suffix_only;
-
- memset(buf, 0, sizeof(buf));
- thresh = floor(bar_width * (percent / 100)) - 1;
+ if (bar_width > 8) {
+ memset(buf, 0, sizeof(buf));
+ thresh = floor(bar_width * (percent / 100)) - 1;
-
- for (n = 1; n < bar_width - 1; n++) {
- if (n <= thresh)
- buf[n] = '=';
- else
- buf[n] = ' ';
+ for (n = 1; n < bar_width - 1; n++) {
+ if (n <= thresh)
+ buf[n] = '=';
+ else
+ buf[n] = ' ';
+ }
+ buf[thresh] = '>';
+ buf[0] = '[';
+ buf[bar_width - 1] = ']';
+ snprintf(buf + bar_width, sizeof(buf) - bar_width,
+ " %3d%% ", (int)floor(percent));
}
- buf[thresh] = '>';
- buf[0] = '[';
- buf[bar_width - 1] = ']';
-
- snprintf(buf + bar_width, sizeof(buf) - bar_width,
- " %3d%% ", (int)floor(percent));
+ fputs("\r\033[K", stderr);
fputs(buf, stderr);
-suffix_only:
fputs(suffix, stderr);
fflush(stderr);
}