diff options
author | Olaf Hering <olaf@aepfle.de> | 2013-02-15 13:32:11 +0000 |
---|---|---|
committer | Olaf Hering <olaf@aepfle.de> | 2013-02-15 13:32:11 +0000 |
commit | cee66355322f5255b30acd79429c6ed8e63af694 (patch) | |
tree | 3a6eed7f5c86c2d27165979230864738ff88e48c /tools/libxc | |
parent | 66de7c75fdf23039bc773dfe49b4cb5c310627cb (diff) | |
download | xen-cee66355322f5255b30acd79429c6ed8e63af694.tar.gz xen-cee66355322f5255b30acd79429c6ed8e63af694.tar.bz2 xen-cee66355322f5255b30acd79429c6ed8e63af694.zip |
tools/xc: handle tty output differently in stdiostream_progress
If the output goes to a tty, rewind the cursor and print everything in a
single line as it was done up to now. If the output goes to a file or
pipe print a newline after each progress output. This will fix logging
of progress messages from xc_save to xend.log.
To support XTL_STDIOSTREAM_SHOW_PID or XTL_STDIOSTREAM_SHOW_DATE print
the output via vmessage if the output is not a tty.
Signed-off-by: Olaf Hering <olaf@aepfle.de>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
Committed-by: Ian Campbell <ian.campbell@citrix.com>
Diffstat (limited to 'tools/libxc')
-rw-r--r-- | tools/libxc/xtl_logger_stdio.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/tools/libxc/xtl_logger_stdio.c b/tools/libxc/xtl_logger_stdio.c index 24922d2d2e..25b2464e72 100644 --- a/tools/libxc/xtl_logger_stdio.c +++ b/tools/libxc/xtl_logger_stdio.c @@ -81,6 +81,17 @@ static void stdiostream_vmessage(xentoollog_logger *logger_in, fflush(lg->f); } +static void stdiostream_message(struct xentoollog_logger *logger_in, + xentoollog_level level, + const char *context, + const char *format, ...) +{ + va_list al; + va_start(al,format); + stdiostream_vmessage(logger_in, level, -1, context, format, al); + va_end(al); +} + static void stdiostream_progress(struct xentoollog_logger *logger_in, const char *context, const char *doing_what, int percent, @@ -105,11 +116,18 @@ static void stdiostream_progress(struct xentoollog_logger *logger_in, if (this_level < lg->min_level) return; + lg->progress_last_percent = percent; + + if (isatty(fileno(lg->f)) <= 0) { + stdiostream_message(logger_in, this_level, context, + "%s: %lu/%lu %3d%%", + doing_what, done, total, percent); + return; + } + if (lg->progress_erase_len) putc('\r', lg->f); - lg->progress_last_percent = percent; - newpel = fprintf(lg->f, "%s%s" "%s: %lu/%lu %3d%%%s", context?context:"", context?": ":"", doing_what, done, total, percent, |