Fix compilation on libxcb 1.5

libxkbcommon-x11 uses xcb_discard_reply() function which was
introduced in libxcb 1.6, this brakes the compilation in
src/3rdparty/xkbcommon/src/x11/util.c when linking with libxcb 1.5 :

linking ../../../../plugins/platforms/libqxcb.so
.obj/util.o: In function `adopt_atoms':
util.c:(.text+0x347): undefined reference to `xcb_discard_reply'
collect2: error: ld returned 1 exit status

We can use an alternative approach to discard uncollected replies
and in addition add a fix for out-of-bounds error [1]

[1] e3f751be66

Task-number: QTBUG-38952
Change-Id: Ide90f9a2e75fc79d2bab0b81adb282c8cc81c345
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
bb10
Gatis Paeglis 2014-05-15 13:09:31 +02:00 committed by The Qt Project
parent af16f88e97
commit ba28ca60f6
2 changed files with 25 additions and 2 deletions

View File

@ -0,0 +1,19 @@
diff --git a/src/3rdparty/xkbcommon/src/x11/util.c b/src/3rdparty/xkbcommon/src/x11/util.c
index 92ff2e6..7659c71 100644
--- a/src/3rdparty/xkbcommon/src/x11/util.c
+++ b/src/3rdparty/xkbcommon/src/x11/util.c
@@ -198,8 +198,12 @@ adopt_atoms(struct xkb_context *ctx, xcb_connection_t *conn,
* sit there waiting. Sad.
*/
err_discard:
- for (size_t j = i + 1; j < stop; j++)
- xcb_discard_reply(conn, cookies[j].sequence);
+ for (size_t j = i + 1; j < stop; j++) {
+ if (from[j] != XCB_ATOM_NONE) {
+ reply = xcb_get_atom_name_reply(conn, cookies[j % SIZE], NULL);
+ free(reply);
+ }
+ }
return false;
}
}

View File

@ -198,8 +198,12 @@ adopt_atoms(struct xkb_context *ctx, xcb_connection_t *conn,
* sit there waiting. Sad.
*/
err_discard:
for (size_t j = i + 1; j < stop; j++)
xcb_discard_reply(conn, cookies[j].sequence);
for (size_t j = i + 1; j < stop; j++) {
if (from[j] != XCB_ATOM_NONE) {
reply = xcb_get_atom_name_reply(conn, cookies[j % SIZE], NULL);
free(reply);
}
}
return false;
}
}