On 04/21/2010 03:28 AM, Daniel P. Berrange wrote:
On Tue, Apr 20, 2010 at 06:09:37PM -0300, Luiz Capitulino wrote:
There are error handling functions in QEMU which print errno codes
to the user. While it's debatable if this is good from a user
perspective, sometimes it's the best you can do because it's what
system calls return and this is also useful for debugging.
So, we need a way to expose those codes in QMP. We can't use the
codes themselfs because they may vary between systems.
The best solution I can think of is returning the string
representation of the name. For example, EIO becomes "EIO".
This is what get_errno_string() does.
Signed-off-by: Luiz Capitulino<lcapitul...@redhat.com>
---
qemu-error.c | 25 +++++++++++++++++++++++++
qemu-error.h | 1 +
2 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/qemu-error.c b/qemu-error.c
index 5a35e7c..55ce133 100644
--- a/qemu-error.c
+++ b/qemu-error.c
@@ -207,3 +207,28 @@ void error_report(const char *fmt, ...)
va_end(ap);
error_printf("\n");
}
+
+/*
+ * This is probably only useful for QMP
+ */
+const char *get_errno_string(int err)
+{
+ assert(err< 0);
+
+ switch (err) {
+ case -EINVAL:
+ return "EINVAL";
+ case -EIO:
+ return "EIO";
+ case -ENOENT:
+ return "ENOENT";
+ case -ENOMEDIUM:
+ return "ENOMEDIUM";
+ case -ENOTSUP:
+ return "ENOTSUP";
+ default:
+ return "unknown";
+ }
+
+ abort();
+}
Wouldn't it be nicer to return strerror_r() output instead of errno
names ?
Both are equally wrong :-)
QMP should insult users from underlying platform quirks. We should
translate errnos to appropriate QMP error types.
Regards,
Anthony Liguori
Daniel