xcb_connection_t *xcb_connect_to_fd(int fd, xcb_auth_info_t *auth_info) { xcb_connection_t* c; #ifndef _WIN32 #ifndef USE_POLL if(fd >= FD_SETSIZE) /* would overflow in FD_SET */ { close(fd); return _xcb_conn_ret_error(XCB_CONN_ERROR); } #endif #endif /* !_WIN32*/ c = calloc(1, sizeof(xcb_connection_t)); if(!c) { close(fd); return _xcb_conn_ret_error(XCB_CONN_CLOSED_MEM_INSUFFICIENT) ; } c->fd = fd; if(!( set_fd_flags(fd) && pthread_mutex_init(&c->iolock, 0) == 0 && _xcb_in_init(&c->in) && _xcb_out_init(&c->out) && write_setup(c, auth_info) && read_setup(c) && _xcb_ext_init(c) && _xcb_xid_init(c) )) { xcb_disconnect(c); return _xcb_conn_ret_error(XCB_CONN_ERROR); } return c; }
xcb_connection_t *xcb_connect_to_fd(int fd, xcb_auth_info_t *auth_info) { xcb_connection_t* c; #ifndef USE_POLL if(fd >= FD_SETSIZE) /* would overflow in FD_SET */ { close(fd); return (xcb_connection_t *) &error_connection; } #endif c = calloc(1, sizeof(xcb_connection_t)); if(!c) { close(fd); return (xcb_connection_t *) &error_connection; } c->fd = fd; if(!( set_fd_flags(fd) && pthread_mutex_init(&c->iolock, 0) == 0 && _xcb_in_init(&c->in) && _xcb_out_init(&c->out) && write_setup(c, auth_info) && read_setup(c) && _xcb_ext_init(c) && _xcb_xid_init(c) )) { xcb_disconnect(c); return (xcb_connection_t *) &error_connection; } return c; }