From f52513b09580c1533e6c48a4162d3d5f61f3b081 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Fri, 5 Mar 2021 18:23:13 +0100 Subject: misc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- libgamma_x_randr_internal_translate_error.c | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 libgamma_x_randr_internal_translate_error.c (limited to 'libgamma_x_randr_internal_translate_error.c') 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; +} -- cgit v1.2.3-70-g09d2