buf = malloc(length + (genrep.response_type == XCBReply ? 0 : sizeof(CARD32)));
if(!buf)
+ {
+ _xcb_conn_shutdown(c);
return 0;
+ }
if(_xcb_in_read_block(c, buf, length) <= 0)
{
free(buf);
reader_list *reader;
struct reply_list *cur = malloc(sizeof(struct reply_list));
if(!cur)
+ {
+ _xcb_conn_shutdown(c);
return 0;
+ }
cur->reply = buf;
cur->next = 0;
*c->in.current_reply_tail = cur;
event = malloc(sizeof(struct event_list));
if(!event)
{
+ _xcb_conn_shutdown(c);
free(buf);
return 0;
}
pending_reply *pend = malloc(sizeof(pending_reply));
assert(workaround != WORKAROUND_NONE || flags != 0);
if(!pend)
+ {
+ _xcb_conn_shutdown(c);
return 0;
+ }
pend->request = request;
pend->workaround = workaround;
pend->flags = flags;
c->in.queue_len += n;
while(read_packet(c))
/* empty */;
- return (n > 0) || (n < 0 && errno == EAGAIN);
+ if((n > 0) || (n < 0 && errno == EAGAIN))
+ return 1;
+ _xcb_conn_shutdown(c);
+ return 0;
}
int _xcb_in_read_block(XCBConnection *c, void *buf, int len)
{
int ret = read_block(c->fd, (char *) buf + done, len - done);
if(ret <= 0)
+ {
+ _xcb_conn_shutdown(c);
return ret;
+ }
}
return len;