All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Alistair Francis <alistair.francis@xilinx.com>
Cc: qemu-devel@nongnu.org, alistair23@gmail.com, philippe@mathieu-daude.net
Subject: Re: [Qemu-devel] [PATCH v2 2/8] error: Functions to report warnings and informational messages
Date: Mon, 10 Jul 2017 14:56:59 +0200	[thread overview]
Message-ID: <87inj030x0.fsf@dusky.pond.sub.org> (raw)
In-Reply-To: <96f42a10eea7c311f6a50391042c373ffb4247d1.1499453788.git.alistair.francis@xilinx.com> (Alistair Francis's message of "Fri, 7 Jul 2017 16:21:02 -0700")

Alistair Francis <alistair.francis@xilinx.com> writes:

> Add warn_report(), warn_vreport() for reporting warnings, and
> info_report(), info_vreport() for informational messages.
>
> These are implemented them with a helper function factored out of
> error_vreport(), suitably generalized. This patch makes no changes
> to the output of the original error_report() function.
>
> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
> ---
> v2:
>  - Don't add *vreport() functions to checkpatch
>  - Maintain original comments for the reporting functions
>  - Don't change the error report output in this patch
> v1:
>  - Don't expose the generic report and vreport() functions
>  - Prefix error messages
>  - Use vreport instead of qmsg_vreport()
> RFC V3:
>  - Change the function and enum names to be more descriptive
>  - Add wrapper functions for *_report() and *_vreport()
>
>  include/qemu/error-report.h |  7 ++++
>  scripts/checkpatch.pl       |  5 ++-
>  util/qemu-error.c           | 97 ++++++++++++++++++++++++++++++++++++++++++---
>  3 files changed, 102 insertions(+), 7 deletions(-)
>
> diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h
> index 3001865896..e1c8ae1a52 100644
> --- a/include/qemu/error-report.h
> +++ b/include/qemu/error-report.h
> @@ -35,8 +35,15 @@ void error_printf(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
>  void error_vprintf_unless_qmp(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
>  void error_printf_unless_qmp(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
>  void error_set_progname(const char *argv0);
> +
>  void error_vreport(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
> +void warn_vreport(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
> +void info_vreport(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
> +
>  void error_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> +void warn_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> +void info_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> +
>  const char *error_get_progname(void);
>  extern bool enable_timestamp_msg;
>  
> diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
> index 73efc927a9..b76fe30ad3 100755
> --- a/scripts/checkpatch.pl
> +++ b/scripts/checkpatch.pl
> @@ -2534,8 +2534,9 @@ sub process {
>  				error_set|
>  				error_prepend|
>  				error_reportf_err|
> -				error_vreport|
> -				error_report}x;
> +				error_report|
> +				warn_report|
> +				info_report}x;

This check is about newlines in format strings.  Both the FOO_report()
and the FOO_vreport() take format strings.  Therefore, keep
error_vreport() and add warn_vreport(), info_vreport().

>  
>  	if ($rawline =~ /\b(?:$qemu_error_funcs)\s*\(.*\".*\\n/) {
>  		ERROR("Error messages should not contain newlines\n" . $herecurr);
> diff --git a/util/qemu-error.c b/util/qemu-error.c
> index 1c5e35ecdb..b555247e24 100644
> --- a/util/qemu-error.c
> +++ b/util/qemu-error.c
> @@ -14,6 +14,16 @@
>  #include "monitor/monitor.h"
>  #include "qemu/error-report.h"
>  
> +/*
> + * @report_type is the type of message: error, warning or
> + * informational.
> + */
> +typedef enum {
> +    REPORT_TYPE_ERROR,
> +    REPORT_TYPE_WARNING,
> +    REPORT_TYPE_INFO,
> +} report_type;
> +
>  void error_printf(const char *fmt, ...)
>  {
>      va_list ap;
> @@ -179,17 +189,28 @@ static void print_loc(void)
>  
>  bool enable_timestamp_msg;
>  /*
> - * Print an error message to current monitor if we have one, else to stderr.
> + * Print a message to current monitor if we have one, else to stderr.

Need a sentence on @report_type right here.  Perhaps

    * @report_type is the type of message: error, warning or
    * informational.

>   * Format arguments like vsprintf().  The resulting message should be
>   * a single phrase, with no newline or trailing punctuation.
>   * Prepend the current location and append a newline.
>   * It's wrong to call this in a QMP monitor.  Use error_setg() there.
>   */
> -void error_vreport(const char *fmt, va_list ap)
> +static void vreport(report_type type, const char *fmt, va_list ap)
>  {
>      GTimeVal tv;
>      gchar *timestr;
>  
> +    switch (type) {
> +    case REPORT_TYPE_ERROR:
> +        break;
> +    case REPORT_TYPE_WARNING:
> +        error_printf("warning: ");
> +        break;
> +    case REPORT_TYPE_INFO:
> +        error_printf("info: ");
> +        break;
> +    }
> +
>      if (enable_timestamp_msg && !cur_mon) {
>          g_get_current_time(&tv);
>          timestr = g_time_val_to_iso8601(&tv);
> @@ -204,8 +225,41 @@ void error_vreport(const char *fmt, va_list ap)
>  
>  /*
>   * Print an error message to current monitor if we have one, else to stderr.
> - * Format arguments like sprintf().  The resulting message should be a
> - * single phrase, with no newline or trailing punctuation.
> + * Format arguments like vsprintf().  The resulting message should be
> + * a single phrase, with no newline or trailing punctuation.
> + * Prepend the current location and append a newline.
> + * It's wrong to call this in a QMP monitor.  Use error_setg() there.
> + */
> +void error_vreport(const char *fmt, va_list ap)
> +{
> +    vreport(REPORT_TYPE_ERROR, fmt, ap);
> +}
> +
> +/*
> + * Print a warning message to current monitor if we have one, else to stderr.
> + */

You missed one :)

> +void warn_vreport(const char *fmt, va_list ap)
> +{
> +    vreport(REPORT_TYPE_WARNING, fmt, ap);
> +}
> +
> +/*
> + * Print an information message to current monitor if we have one, else to
> + * stderr.
> + * Format arguments like vsprintf().  The resulting message should be
> + * a single phrase, with no newline or trailing punctuation.
> + * Prepend the current location and append a newline.
> + * It's wrong to call this in a QMP monitor.  Use error_setg() there.
> + */
> +void info_vreport(const char *fmt, va_list ap)
> +{
> +    vreport(REPORT_TYPE_INFO, fmt, ap);
> +}
> +
> +/*
> + * Print an error message to current monitor if we have one, else to stderr.
> + * Format arguments like vsprintf().  The resulting message should be

like sprintf()

> + * a single phrase, with no newline or trailing punctuation.
>   * Prepend the current location and append a newline.
>   * It's wrong to call this in a QMP monitor.  Use error_setg() there.
>   */
   void error_report(const char *fmt, ...)
> @@ -214,6 +268,39 @@ void error_report(const char *fmt, ...)
>      va_list ap;
>  
>      va_start(ap, fmt);
> -    error_vreport(fmt, ap);
> +    vreport(REPORT_TYPE_ERROR, fmt, ap);
> +    va_end(ap);
> +}
> +
> +/*
> + * Print a warning message to current monitor if we have one, else to stderr.
> + * Format arguments like sprintf(). The resulting message should be a
> + * single phrase, with no newline or trailing punctuation.
> + * Prepend the current location and append a newline.
> + * It's wrong to call this in a QMP monitor.  Use error_setg() there.
> + */
> +void warn_report(const char *fmt, ...)
> +{
> +    va_list ap;
> +
> +    va_start(ap, fmt);
> +    vreport(REPORT_TYPE_WARNING, fmt, ap);
> +    va_end(ap);
> +}
> +
> +/*
> + * Print an information message to current monitor if we have one, else to
> + * stderr.
> + * Format arguments like sprintf(). The resulting message should be a
> + * single phrase, with no newline or trailing punctuation.
> + * Prepend the current location and append a newline.
> + * It's wrong to call this in a QMP monitor.  Use error_setg() there.
> + */
> +void info_report(const char *fmt, ...)
> +{
> +    va_list ap;
> +
> +    va_start(ap, fmt);
> +    vreport(REPORT_TYPE_INFO, fmt, ap);
>      va_end(ap);
>  }

With these nits touched up:
Reviewed-by: Markus Armbruster <armbru@redhat.com>

  reply	other threads:[~2017-07-10 12:57 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-07 23:20 [Qemu-devel] [PATCH v2 0/8] Implement a warning_report function Alistair Francis
2017-07-07 23:20 ` [Qemu-devel] [PATCH v2 1/8] util/qemu-error: Rename error_print_loc() to be more generic Alistair Francis
2017-07-07 23:21 ` [Qemu-devel] [PATCH v2 2/8] error: Functions to report warnings and informational messages Alistair Francis
2017-07-10 12:56   ` Markus Armbruster [this message]
2017-07-07 23:21 ` [Qemu-devel] [PATCH v2 3/8] Convert error_report() to warn_report() Alistair Francis
2017-07-07 23:35   ` Peter.Chubb
2017-07-09 18:30   ` Max Reitz
2017-07-10 13:24   ` Markus Armbruster
2017-07-07 23:21 ` [Qemu-devel] [PATCH v2 4/8] hw/i386: Improve some of the warning messages Alistair Francis
2017-07-07 23:21 ` [Qemu-devel] [PATCH v2 5/8] char-socket: Report TCP socket waiting as information Alistair Francis
2017-07-07 23:21 ` [Qemu-devel] [PATCH v2 6/8] error: Implement the warn and free Error functions Alistair Francis
2017-07-10 13:39   ` Markus Armbruster
2017-07-07 23:21 ` [Qemu-devel] [PATCH v2 7/8] Convert error_report*_err() to warn_report*_err() Alistair Francis
2017-07-10 13:43   ` Markus Armbruster
2017-07-07 23:21 ` [Qemu-devel] [PATCH v2 8/8] error: Add a 'error: ' prefix to error_report() Alistair Francis
2017-07-08  4:36   ` Philippe Mathieu-Daudé

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87inj030x0.fsf@dusky.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=alistair.francis@xilinx.com \
    --cc=alistair23@gmail.com \
    --cc=philippe@mathieu-daude.net \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.