On 2018-04-16 09:46, zhenwei pi wrote: > currently qemu progress message only print into stdout, and other thread may > print some log into stdout at the same time. > add a new api qemu_progress_set_output to redirect progress message to > another file stream. > > Signed-off-by: zhenwei pi <zhenwei...@youruncloud.com> > --- > include/qemu-common.h | 1 + > util/qemu-progress.c | 22 +++++++++++++++++++--- > 2 files changed, 20 insertions(+), 3 deletions(-)
Well, but after this patch, qemu will still only print progress to stdout because qemu_progress_set_output() isn't used anywhere... > diff --git a/include/qemu-common.h b/include/qemu-common.h > index 8a4f63c..511e7e0 100644 > --- a/include/qemu-common.h > +++ b/include/qemu-common.h > @@ -128,6 +128,7 @@ ssize_t qemu_co_send_recv(int sockfd, void *buf, size_t > bytes, bool do_send); > void qemu_progress_init(int enabled, float min_skip); > void qemu_progress_end(void); > void qemu_progress_print(float delta, int max); > +int qemu_progress_set_output(FILE *output); > const char *qemu_get_vm_name(void); > > #define QEMU_FILE_TYPE_BIOS 0 > diff --git a/util/qemu-progress.c b/util/qemu-progress.c > index 3c2223c..dd7aa52 100644 > --- a/util/qemu-progress.c > +++ b/util/qemu-progress.c > @@ -31,6 +31,7 @@ struct progress_state { > float min_skip; > void (*print)(void); > void (*end)(void); > + FILE *output; > }; > > static struct progress_state state; > @@ -43,17 +44,18 @@ static volatile sig_atomic_t print_pending; > */ > static void progress_simple_print(void) > { > - printf(" (%3.2f/100%%)\r", state.current); > - fflush(stdout); > + fprintf(state.output, " (%3.2f/100%%)\r", state.current); > + fflush(state.output); Also, I'm not sure we should use \r when printing to anything but stdout. Max > } > > static void progress_simple_end(void) > { > - printf("\n"); > + fprintf(state.output, "\n"); > } > > static void progress_simple_init(void) > { > + state.output = stdout; > state.print = progress_simple_print; > state.end = progress_simple_end; > } > @@ -129,6 +131,20 @@ void qemu_progress_end(void) > } > > /* > + * Redirect progress into another file stream. > + * @output is the new file stream. > + */ > +int qemu_progress_set_output(FILE *output) > +{ > + if (!output) { > + return -EINVAL; > + } > + > + state.output = output; > + return 0; > +} > + > +/* > * Report progress. > * @delta is how much progress we made. > * If @max is zero, @delta is an absolut value of the total job done. >
signature.asc
Description: OpenPGP digital signature