aboutsummaryrefslogtreecommitdiffstats
path: root/libgamma_x_randr_internal_translate_error.c
blob: 7752c0366fcc0f0da30cd5148f46c638fd321f63 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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;
}