From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:54643) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TJo3u-0002Pp-4d for qemu-devel@nongnu.org; Thu, 04 Oct 2012 12:14:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TJo3o-0002hL-Ay for qemu-devel@nongnu.org; Thu, 04 Oct 2012 12:14:10 -0400 Received: from mx1.redhat.com ([209.132.183.28]:7770) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TJo3o-0002gy-0y for qemu-devel@nongnu.org; Thu, 04 Oct 2012 12:14:04 -0400 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q94GE3xr001651 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 4 Oct 2012 12:14:03 -0400 Date: Thu, 4 Oct 2012 13:14:56 -0300 From: Luiz Capitulino Message-ID: <20121004131456.1741007c@doriath.home> In-Reply-To: <1349275025-5093-2-git-send-email-pbonzini@redhat.com> References: <1349275025-5093-1-git-send-email-pbonzini@redhat.com> <1349275025-5093-2-git-send-email-pbonzini@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 01/18] error: add error_set_errno and error_setg_errno List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: qemu-devel@nongnu.org On Wed, 3 Oct 2012 16:36:48 +0200 Paolo Bonzini wrote: > These functions help maintaining homogeneous formatting of error > messages that include strerror values. > > Signed-off-by: Paolo Bonzini Acked-by: Luiz Capitulino One small comment below. > --- > error.c | 28 ++++++++++++++++++++++++++++ > error.h | 9 +++++++++ > 2 file modificati, 37 inserzioni(+) > > diff --git a/error.c b/error.c > index 1f05fc4..128d88c 100644 > --- a/error.c > +++ b/error.c > @@ -43,6 +43,34 @@ void error_set(Error **errp, ErrorClass err_class, const char *fmt, ...) > *errp = err; > } > > +void error_set_errno(Error **errp, int os_errno, ErrorClass err_class, > + const char *fmt, ...) The function's name makes me expect that something else is done with os_errno other than appending the strerror() string to the user message, but I can't suggest anything better (and allows for storing errno in the Error object in the future if we want to). > +{ > + Error *err; > + char *msg1; > + va_list ap; > + > + if (errp == NULL) { > + return; > + } > + assert(*errp == NULL); > + > + err = g_malloc0(sizeof(*err)); > + > + va_start(ap, fmt); > + msg1 = g_strdup_vprintf(fmt, ap); > + if (os_errno != 0) { > + err->msg = g_strdup_printf("%s: %s", msg1, strerror(os_errno)); > + g_free(msg1); > + } else { > + err->msg = msg1; > + } > + va_end(ap); > + err->err_class = err_class; > + > + *errp = err; > +} > + > Error *error_copy(const Error *err) > { > Error *err_new; > diff --git a/error.h b/error.h > index da7fed3..4d52e73 100644 > --- a/error.h > +++ b/error.h > @@ -30,10 +30,19 @@ typedef struct Error Error; > void error_set(Error **err, ErrorClass err_class, const char *fmt, ...) GCC_FMT_ATTR(3, 4); > > /** > + * Set an indirect pointer to an error given a ErrorClass value and a > + * printf-style human message, followed by a strerror() string if > + * @os_error is not zero. > + */ > +void error_set_errno(Error **err, int os_error, ErrorClass err_class, const char *fmt, ...) GCC_FMT_ATTR(4, 5); > + > +/** > * Same as error_set(), but sets a generic error > */ > #define error_setg(err, fmt, ...) \ > error_set(err, ERROR_CLASS_GENERIC_ERROR, fmt, ## __VA_ARGS__) > +#define error_setg_errno(err, os_error, fmt, ...) \ > + error_set_errno(err, os_error, ERROR_CLASS_GENERIC_ERROR, fmt, ## __VA_ARGS__) > > /** > * Returns true if an indirect pointer to an error is pointing to a valid