static int write_setup(XCBConnection *c, XCBAuthInfo *auth_info)
{
static const char pad[3];
- XCBSetupReq out;
+ XCBSetupRequest out;
struct iovec parts[6];
int count = 0;
int endian = 0x01020304;
out.protocol_minor_version = X_PROTOCOL_REVISION;
out.authorization_protocol_name_len = 0;
out.authorization_protocol_data_len = 0;
- parts[count].iov_len = sizeof(XCBSetupReq);
+ parts[count].iov_len = sizeof(XCBSetupRequest);
parts[count++].iov_base = &out;
- parts[count].iov_len = XCB_PAD(sizeof(XCBSetupReq));
+ parts[count].iov_len = XCB_PAD(sizeof(XCBSetupRequest));
parts[count++].iov_base = (char *) pad;
if(auth_info)
if(n < 0 && errno == EAGAIN)
return 1;
if(n <= 0)
+ {
+ _xcb_conn_shutdown(c);
return 0;
+ }
for(; *count; --*count, ++*vector)
{
const XCBSetup *XCBGetSetup(XCBConnection *c)
{
+ if(c->has_error)
+ return 0;
/* doesn't need locking because it's never written to. */
return c->setup;
}
int XCBGetFileDescriptor(XCBConnection *c)
{
+ if(c->has_error)
+ return -1;
/* doesn't need locking because it's never written to. */
return c->fd;
}
void XCBDisconnect(XCBConnection *c)
{
- if(!c)
+ if(c->has_error)
return;
free(c->setup);
/* Private interface */
+void _xcb_conn_shutdown(XCBConnection *c)
+{
+ c->has_error = 1;
+}
+
int _xcb_conn_wait(XCBConnection *c, pthread_cond_t *cond, struct iovec **vector, int *count)
{
int ret;
ret = select(c->fd + 1, &rfds, &wfds, 0, 0);
} while (ret == -1 && errno == EINTR);
if (ret < 0)
+ {
+ _xcb_conn_shutdown(c);
ret = 0;
+ }
pthread_mutex_lock(&c->iolock);
if(ret)