qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 1/2] qemu-error: Introduce get_errno_name()


From: Luiz Capitulino
Subject: [Qemu-devel] [PATCH 1/2] qemu-error: Introduce get_errno_name()
Date: Wed, 28 Apr 2010 17:32:08 -0300

We need to expose errno in QMP, for three reasons:

  1. Some error handling functions print errno codes to the user,
     while it's debatable whether this is good or not from a user
     perspective, sometimes it's the best we can do because it's
     what system calls and libraries return

  2. Some events (eg. BLOCK_IO_ERROR) will be made even more
     complete with errno information

  3. It's very good for debugging

So, we need a way to expose those codes in QMP. We can't just use
the codes themselfs because they may vary between systems.

The best solution I can think of is to return the string
representation of the name. For example, EIO becomes "EIO".

This is what get_errno_name() does.

Signed-off-by: Luiz Capitulino <address@hidden>
---
 qemu-error.c |   85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 qemu-error.h |    1 +
 2 files changed, 86 insertions(+), 0 deletions(-)

diff --git a/qemu-error.c b/qemu-error.c
index 5a35e7c..7035417 100644
--- a/qemu-error.c
+++ b/qemu-error.c
@@ -207,3 +207,88 @@ void error_report(const char *fmt, ...)
     va_end(ap);
     error_printf("\n");
 }
+
+/*
+ * Probably only useful for QMP
+ */
+const char *get_errno_name(int err)
+{
+    switch (abs(err)) {
+    case EPERM:
+        return "EPERM";
+    case ENOENT:
+        return "ENOENT";
+    case ESRCH:
+        return "ESRCH";
+    case EINTR:
+        return "EINTR";
+    case EIO:
+        return "EIO";
+    case ENXIO:
+        return "ENXIO";
+    case E2BIG:
+        return "E2BIG";
+    case ENOEXEC:
+        return "ENOEXEC";
+    case EBADF:
+        return "EBADF";
+    case ECHILD:
+        return "ECHILD";
+    case EAGAIN:
+        return "EAGAIN";
+    case ENOMEM:
+        return "ENOMEM";
+    case EACCES:
+        return "EACCES";
+    case EFAULT:
+        return "EFAULT";
+    case ENOTBLK:
+        return "ENOTBLK";
+    case EBUSY:
+        return "EBUSY";
+    case EEXIST:
+        return "EEXIST";
+    case EXDEV:
+        return "EXDEV";
+    case ENODEV:
+        return "ENODEV";
+    case ENOTDIR:
+        return "ENOTDIR";
+    case EISDIR:
+        return "EISDIR";
+    case EINVAL:
+        return "EINVAL";
+    case ENFILE:
+        return "ENFILE";
+    case EMFILE:
+        return "EMFILE";
+    case ENOTTY:
+        return "ENOTTY";
+    case ETXTBSY:
+        return "ETXTBSY";
+    case EFBIG:
+        return "EFBIG";
+    case ENOSPC:
+        return "ENOSPC";
+    case ESPIPE:
+        return "ESPIPE";
+    case EROFS:
+        return "EROFS";
+    case EMLINK:
+        return "EMLINK";
+    case EPIPE:
+        return "EPIPE";
+    case EDOM:
+        return "EDOM";
+    case ERANGE:
+        return "ERANGE";
+    case ENOMEDIUM:
+        return "ENOMEDIUM";
+    case ENOTSUP:
+        return "ENOTSUP";
+    default:
+        return "unknown";
+    }
+
+    abort();
+}
diff --git a/qemu-error.h b/qemu-error.h
index a45609f..c5e39b5 100644
--- a/qemu-error.h
+++ b/qemu-error.h
@@ -38,4 +38,5 @@ void error_print_loc(void);
 void error_set_progname(const char *argv0);
 void error_report(const char *fmt, ...) __attribute__ ((format(printf, 1, 2)));
 
+const char *get_errno_name(int err);
 #endif
-- 
1.7.1.rc1.12.ga6018





reply via email to

[Prev in Thread] Current Thread [Next in Thread]