From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59832) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V1O0S-0008Pp-NQ for qemu-devel@nongnu.org; Mon, 22 Jul 2013 17:51:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V1O0R-0008FF-PH for qemu-devel@nongnu.org; Mon, 22 Jul 2013 17:51:00 -0400 Received: from mail-ie0-x22a.google.com ([2607:f8b0:4001:c03::22a]:35051) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V1O0R-0008F8-KL for qemu-devel@nongnu.org; Mon, 22 Jul 2013 17:50:59 -0400 Received: by mail-ie0-f170.google.com with SMTP id e11so17016486iej.29 for ; Mon, 22 Jul 2013 14:50:58 -0700 (PDT) Sender: fluxion Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Michael Roth In-Reply-To: <20130715162049.16676.40012.stgit@outback> References: <20130715162023.16676.87828.stgit@outback> <20130715162049.16676.40012.stgit@outback> Message-ID: <20130722215055.16294.60029@loki> Date: Mon, 22 Jul 2013 16:50:55 -0500 Subject: Re: [Qemu-devel] [PATCH v7 06/10] error: Add error_set_win32 and error_setg_win32 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Tomoki Sekiyama , qemu-devel@nongnu.org Cc: libaiqing@huawei.com, ghammer@redhat.com, stefanha@gmail.com, lcapitulino@redhat.com, vrozenfe@redhat.com, pbonzini@redhat.com, seiji.aguchi@hds.com, lersek@redhat.com, areis@redhat.com Quoting Tomoki Sekiyama (2013-07-15 11:20:49) > These functions help maintaining homogeneous formatting of error messages > with Windows error code and description (generated by > g_win32_error_message()). > = > Signed-off-by: Tomoki Sekiyama Reviewed-by: Michael Roth > --- > include/qapi/error.h | 13 +++++++++++++ > util/error.c | 35 +++++++++++++++++++++++++++++++++++ > 2 files changed, 48 insertions(+) > = > diff --git a/include/qapi/error.h b/include/qapi/error.h > index ffd1cea..7d4c696 100644 > --- a/include/qapi/error.h > +++ b/include/qapi/error.h > @@ -36,6 +36,15 @@ void error_set(Error **err, ErrorClass err_class, cons= t char *fmt, ...) GCC_FMT_ > */ > void error_set_errno(Error **err, int os_error, ErrorClass err_class, co= nst char *fmt, ...) GCC_FMT_ATTR(4, 5); > = > +#ifdef _WIN32 > +/** > + * Set an indirect pointer to an error given a ErrorClass value and a > + * printf-style human message, followed by a g_win32_error_message() str= ing if > + * @win32_err is not zero. > + */ > +void error_set_win32(Error **err, int win32_err, ErrorClass err_class, c= onst char *fmt, ...) GCC_FMT_ATTR(4, 5); > +#endif > + > /** > * Same as error_set(), but sets a generic error > */ > @@ -43,6 +52,10 @@ void error_set_errno(Error **err, int os_error, ErrorC= lass err_class, const char > 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__) > +#ifdef _WIN32 > +#define error_setg_win32(err, win32_err, fmt, ...) \ > + error_set_win32(err, win32_err, ERROR_CLASS_GENERIC_ERROR, fmt, ## _= _VA_ARGS__) > +#endif > = > /** > * Helper for open() errors > diff --git a/util/error.c b/util/error.c > index 53b0435..ec0faa6 100644 > --- a/util/error.c > +++ b/util/error.c > @@ -76,6 +76,41 @@ void error_setg_file_open(Error **errp, int os_errno, = const char *filename) > error_setg_errno(errp, os_errno, "Could not open '%s'", filename); > } > = > +#ifdef _WIN32 > + > +void error_set_win32(Error **errp, int win32_err, ErrorClass err_class, > + const char *fmt, ...) > +{ > + Error *err; > + char *msg1; > + va_list ap; > + > + if (errp =3D=3D NULL) { > + return; > + } > + assert(*errp =3D=3D NULL); > + > + err =3D g_malloc0(sizeof(*err)); > + > + va_start(ap, fmt); > + msg1 =3D g_strdup_vprintf(fmt, ap); > + if (win32_err !=3D 0) { > + char *msg2 =3D g_win32_error_message(win32_err); > + err->msg =3D g_strdup_printf("%s: %s (error: %x)", msg1, msg2, > + (unsigned)win32_err); > + g_free(msg2); > + g_free(msg1); > + } else { > + err->msg =3D msg1; > + } > + va_end(ap); > + err->err_class =3D err_class; > + > + *errp =3D err; > +} > + > +#endif > + > Error *error_copy(const Error *err) > { > Error *err_new;