diff options
-rw-r--r-- | src/xcb.h | 4 | ||||
-rw-r--r-- | src/xcb_in.c | 5 |
2 files changed, 8 insertions, 1 deletions
@@ -80,12 +80,16 @@ typedef struct { BYTE response_type; CARD8 pad0; CARD16 sequence; + CARD32 pad[7]; + CARD32 full_sequence; } XCBGenericEvent; typedef struct { BYTE response_type; BYTE error_code; CARD16 sequence; + CARD32 pad[7]; + CARD32 full_sequence; } XCBGenericError; typedef struct { diff --git a/src/xcb_in.c b/src/xcb_in.c index cacb220..cf7dbe7 100644 --- a/src/xcb_in.c +++ b/src/xcb_in.c @@ -133,7 +133,7 @@ static int read_packet(XCBConnection *c) length += genrep.length * 4; } - buf = malloc(length); + buf = malloc(length + (genrep.response_type == 1 ? 0 : sizeof(CARD32))); if(!buf) return 0; if(_xcb_in_read_block(c, buf, length) <= 0) @@ -142,6 +142,9 @@ static int read_packet(XCBConnection *c) return 0; } + if(genrep.response_type != 1) + ((XCBGenericEvent *) buf)->full_sequence = c->in.request_read; + /* reply, or checked error */ if(genrep.response_type == 1 || (genrep.response_type == 0 && pend && (pend->flags & XCB_REQUEST_CHECKED))) { |