* [Qemu-devel] [PATCH] qemu-progress: redirct qemu progress message to another file stream
@ 2018-04-16 7:46 zhenwei pi
2018-04-18 13:06 ` Max Reitz
0 siblings, 1 reply; 3+ messages in thread
From: zhenwei pi @ 2018-04-16 7:46 UTC (permalink / raw)
To: pbonzini, mreitz, kwolf; +Cc: zhenwei.pi, qemu-devel
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.pi@youruncloud.com>
---
include/qemu-common.h | 1 +
util/qemu-progress.c | 22 +++++++++++++++++++---
2 files changed, 20 insertions(+), 3 deletions(-)
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);
}
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.
--
2.7.4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu-progress: redirct qemu progress message to another file stream
2018-04-16 7:46 [Qemu-devel] [PATCH] qemu-progress: redirct qemu progress message to another file stream zhenwei pi
@ 2018-04-18 13:06 ` Max Reitz
2018-04-19 1:00 ` Zhenwei.Pi
0 siblings, 1 reply; 3+ messages in thread
From: Max Reitz @ 2018-04-18 13:06 UTC (permalink / raw)
To: zhenwei pi, pbonzini, kwolf; +Cc: qemu-devel
[-- Attachment #1: Type: text/plain, Size: 2691 bytes --]
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.pi@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.
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [PATCH] qemu-progress: redirct qemu progress message to another file stream
2018-04-18 13:06 ` Max Reitz
@ 2018-04-19 1:00 ` Zhenwei.Pi
0 siblings, 0 replies; 3+ messages in thread
From: Zhenwei.Pi @ 2018-04-19 1:00 UTC (permalink / raw)
To: Max Reitz; +Cc: pbonzini, kwolf, qemu-devel
On 04/18/2018 09:06 PM, Max Reitz wrote:
> 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.pi@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...
>
this patch only provides the basic redirection function. if this patch
is approved, another patch (Ex, qemu convert progress in qemu-img.c)
will be send.
>> 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
qemu redirects progress message into a file, other process reads the file
and uses '\r' to split the string, and we can get the progress exactly.
>> }
>>
>> 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.
>>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-04-19 1:03 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-16 7:46 [Qemu-devel] [PATCH] qemu-progress: redirct qemu progress message to another file stream zhenwei pi
2018-04-18 13:06 ` Max Reitz
2018-04-19 1:00 ` Zhenwei.Pi
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.