qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Tomoki Sekiyama <tomoki.sekiyama@hds.com>
To: qemu-devel@nongnu.org
Cc: libaiqing@huawei.com, ghammer@redhat.com, stefanha@gmail.com,
	mdroth@linux.vnet.ibm.com, lcapitulino@redhat.com,
	vrozenfe@redhat.com, pbonzini@redhat.com, seiji.aguchi@hds.com,
	lersek@redhat.com, areis@redhat.com
Subject: [Qemu-devel] [PATCH v7 06/10] error: Add error_set_win32 and error_setg_win32
Date: Mon, 15 Jul 2013 12:20:49 -0400	[thread overview]
Message-ID: <20130715162049.16676.40012.stgit@outback> (raw)
In-Reply-To: <20130715162023.16676.87828.stgit@outback>

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 <tomoki.sekiyama@hds.com>
---
 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, const char *fmt, ...) GCC_FMT_
  */
 void error_set_errno(Error **err, int os_error, ErrorClass err_class, const 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() string if
+ * @win32_err is not zero.
+ */
+void error_set_win32(Error **err, int win32_err, ErrorClass err_class, const 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, ErrorClass 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 == NULL) {
+        return;
+    }
+    assert(*errp == NULL);
+
+    err = g_malloc0(sizeof(*err));
+
+    va_start(ap, fmt);
+    msg1 = g_strdup_vprintf(fmt, ap);
+    if (win32_err != 0) {
+        char *msg2 = g_win32_error_message(win32_err);
+        err->msg = g_strdup_printf("%s: %s (error: %x)", msg1, msg2,
+                                   (unsigned)win32_err);
+        g_free(msg2);
+        g_free(msg1);
+    } else {
+        err->msg = msg1;
+    }
+    va_end(ap);
+    err->err_class = err_class;
+
+    *errp = err;
+}
+
+#endif
+
 Error *error_copy(const Error *err)
 {
     Error *err_new;

  parent reply	other threads:[~2013-07-15 16:21 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-15 16:20 [Qemu-devel] [PATCH v7 00/10] qemu-ga: fsfreeze on Windows using VSS Tomoki Sekiyama
2013-07-15 16:20 ` [Qemu-devel] [PATCH v7 01/10] configure: Support configuring C++ compiler Tomoki Sekiyama
2013-07-22 20:53   ` Michael Roth
2013-07-23 21:49     ` Tomoki Sekiyama
2013-07-15 16:20 ` [Qemu-devel] [PATCH v7 02/10] Add c++ keywords to QAPI helper script Tomoki Sekiyama
2013-07-22 20:55   ` Michael Roth
2013-07-15 16:20 ` [Qemu-devel] [PATCH v7 03/10] checkpatch.pl: Check .cpp files Tomoki Sekiyama
2013-07-22 21:21   ` Michael Roth
2013-07-23 21:49     ` Tomoki Sekiyama
2013-07-15 16:20 ` [Qemu-devel] [PATCH v7 04/10] Add a script to extract VSS SDK headers on POSIX system Tomoki Sekiyama
2013-07-22 21:27   ` Michael Roth
2013-07-15 16:20 ` [Qemu-devel] [PATCH v7 05/10] qemu-ga: Add configure options to specify path to Windows/VSS SDK Tomoki Sekiyama
2013-07-22 21:42   ` Michael Roth
2013-07-15 16:20 ` Tomoki Sekiyama [this message]
2013-07-22 21:50   ` [Qemu-devel] [PATCH v7 06/10] error: Add error_set_win32 and error_setg_win32 Michael Roth
2013-07-15 16:20 ` [Qemu-devel] [PATCH v7 07/10] qemu-ga: Add Windows VSS provider and requester as DLL Tomoki Sekiyama
2013-07-15 16:20 ` [Qemu-devel] [PATCH v7 08/10] qemu-ga: Call Windows VSS requester in fsfreeze command handler Tomoki Sekiyama
2013-07-15 16:21 ` [Qemu-devel] [PATCH v7 09/10] qemu-ga: Install Windows VSS provider on `qemu-ga -s install' Tomoki Sekiyama
2013-07-15 16:21 ` [Qemu-devel] [PATCH v7 10/10] QMP/qemu-ga-client: Make timeout longer for guest-fsfreeze-freeze command Tomoki Sekiyama
2013-07-18 22:19 ` [Qemu-devel] [PATCH v7 00/10] qemu-ga: fsfreeze on Windows using VSS Michael Roth
2013-07-19  3:40   ` Tomoki Sekiyama
2013-07-22 20:02     ` Tomoki Sekiyama
2013-07-22 20:33       ` Michael Roth
2013-07-22 21:33         ` Tomoki Sekiyama

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=20130715162049.16676.40012.stgit@outback \
    --to=tomoki.sekiyama@hds.com \
    --cc=areis@redhat.com \
    --cc=ghammer@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=lersek@redhat.com \
    --cc=libaiqing@huawei.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=seiji.aguchi@hds.com \
    --cc=stefanha@gmail.com \
    --cc=vrozenfe@redhat.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).