aboutsummaryrefslogtreecommitdiffstats
path: root/libgamma_x_randr_internal_translate_error.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgamma_x_randr_internal_translate_error.c')
-rw-r--r--libgamma_x_randr_internal_translate_error.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/libgamma_x_randr_internal_translate_error.c b/libgamma_x_randr_internal_translate_error.c
new file mode 100644
index 0000000..7752c03
--- /dev/null
+++ b/libgamma_x_randr_internal_translate_error.c
@@ -0,0 +1,31 @@
+/* See LICENSE file for copyright and license details. */
+#define IN_LIBGAMMA_X_RANDR
+#include "common.h"
+
+
+/**
+ * Translate an xcb error into a libgamma error
+ *
+ * @param error_code The xcb error
+ * @param default_error The libgamma error to use if the xcb error is not recognised
+ * @param return_errno Whether an `errno` value may be returned
+ * @return The libgamma error
+ */
+int
+libgamma_x_randr_internal_translate_error(int error_code, int default_error, int return_errno)
+{
+ int r = LIBGAMMA_ERRNO_SET;
+ switch (error_code) {
+ case XCB_CONN_ERROR: errno = ECONNABORTED; break;
+ case XCB_CONN_CLOSED_EXT_NOTSUPPORTED: errno = ENOPROTOOPT; break;
+ case XCB_CONN_CLOSED_MEM_INSUFFICIENT: errno = ENOMEM; break;
+ case XCB_CONN_CLOSED_REQ_LEN_EXCEED: errno = EMSGSIZE; break;
+ case XCB_CONN_CLOSED_PARSE_ERR: r = LIBGAMMA_NO_SUCH_SITE; break;
+ case XCB_CONN_CLOSED_INVALID_SCREEN: r = LIBGAMMA_NO_SUCH_PARTITION; break;
+ case XCB_CONN_CLOSED_FDPASSING_FAILED: errno = EIO; break;
+ default:
+ r = default_error;
+ break;
+ }
+ return (return_errno && r > 0) ? errno : r;
+}