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
parent
af16f88e97
commit
ba28ca60f6
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue