From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:57312) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UfZ6E-0002j1-OP for qemu-devel@nongnu.org; Thu, 23 May 2013 13:14:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UfZ69-0002tz-9e for qemu-devel@nongnu.org; Thu, 23 May 2013 13:14:46 -0400 Received: from mx1.redhat.com ([209.132.183.28]:41476) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UfZ69-0002tr-1L for qemu-devel@nongnu.org; Thu, 23 May 2013 13:14:41 -0400 Date: Thu, 23 May 2013 13:14:01 -0400 From: Luiz Capitulino Message-ID: <20130523131401.4450c946@redhat.com> In-Reply-To: <1369298836-17416-5-git-send-email-xiawenc@linux.vnet.ibm.com> References: <1369298836-17416-1-git-send-email-xiawenc@linux.vnet.ibm.com> <1369298836-17416-5-git-send-email-xiawenc@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH V2 4/5] util: add new function message_printf() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Wenchao Xia Cc: kwolf@redhat.com, phrdina@redhat.com, stefanha@gmail.com, qemu-devel@nongnu.org, armbru@redhat.com, pbonzini@redhat.com On Thu, 23 May 2013 16:47:15 +0800 Wenchao Xia wrote: > This function takes an input parameter *output, which can be specified by > caller as stderr, stdout or a monitor. error_vprintf() now calls message_vprintf(), > which is a static function added in this patch. > > Signed-off-by: Wenchao Xia This solution looks good to me: Reviewed-by: Luiz Capitulino > --- > include/qemu/error-report.h | 13 +++++++++++++ > util/qemu-error.c | 28 ++++++++++++++++++++++++++-- > 2 files changed, 39 insertions(+), 2 deletions(-) > > diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h > index c902cc1..cdde78b 100644 > --- a/include/qemu/error-report.h > +++ b/include/qemu/error-report.h > @@ -14,6 +14,8 @@ > #define QEMU_ERROR_H > > #include > +#include > +#include "qemu/typedefs.h" > > typedef struct Location { > /* all members are private to qemu-error.c */ > @@ -32,6 +34,17 @@ void loc_set_none(void); > void loc_set_cmdline(char **argv, int idx, int cnt); > void loc_set_file(const char *fname, int lno); > > +typedef struct QemuOutput { > + enum { OUTPUT_STREAM, OUTPUT_MONITOR } kind; > + union { > + FILE *stream; > + Monitor *monitor; > + }; > +} QemuOutput; > + > +void message_printf(const QemuOutput *output, const char *fmt, ...) > + GCC_FMT_ATTR(2, 3); > + > void error_vprintf(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0); > void error_printf(const char *fmt, ...) GCC_FMT_ATTR(1, 2); > void error_printf_unless_qmp(const char *fmt, ...) GCC_FMT_ATTR(1, 2); > diff --git a/util/qemu-error.c b/util/qemu-error.c > index 08a36f4..c7ff0a8 100644 > --- a/util/qemu-error.c > +++ b/util/qemu-error.c > @@ -13,6 +13,25 @@ > #include > #include "monitor/monitor.h" > > +static GCC_FMT_ATTR(2, 0) > +void message_vprintf(const QemuOutput *output, const char *fmt, va_list ap) > +{ > + if (output->kind == OUTPUT_STREAM) { > + vfprintf(output->stream, fmt, ap); > + } else if (output->kind == OUTPUT_MONITOR) { > + monitor_vprintf(output->monitor, fmt, ap); > + } > +} > + > +void message_printf(const QemuOutput *output, const char *fmt, ...) > +{ > + va_list ap; > + > + va_start(ap, fmt); > + message_vprintf(output, fmt, ap); > + va_end(ap); > +} > + > /* > * Print to current monitor if we have one, else to stderr. > * TODO should return int, so callers can calculate width, but that > @@ -20,11 +39,16 @@ > */ > void error_vprintf(const char *fmt, va_list ap) > { > + QemuOutput output; > + > if (cur_mon) { > - monitor_vprintf(cur_mon, fmt, ap); > + output.kind = OUTPUT_MONITOR; > + output.monitor = cur_mon; > } else { > - vfprintf(stderr, fmt, ap); > + output.kind = OUTPUT_STREAM; > + output.stream = stderr; > } > + message_vprintf(&output, fmt, ap); > } > > /*