summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUli Schlachter <psychon@znc.in>2015-04-22 09:26:05 +0200
committerUli Schlachter <psychon@znc.in>2015-05-18 22:00:04 +0200
commit89f5d7e1c25ed8f4803723a744784c0d83c155f1 (patch)
tree3cac27c64422aa5100d50c6f6e62978c45b0d967
parenta1ea5243dfeb4fd8b07c8e5d6e4c6d58a19f42a1 (diff)
Code generator: Use xcb_send_request_with_fds()
Signed-off-by: Uli Schlachter <psychon@znc.in>
-rw-r--r--src/c_client.py12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/c_client.py b/src/c_client.py
index e55fc3c..53a1163 100644
--- a/src/c_client.py
+++ b/src/c_client.py
@@ -2298,6 +2298,9 @@ def _c_request_helper(self, name, void, regular, aux=False, reply_fds=False):
_c(' unsigned int i;')
_c(' unsigned int xcb_tmp_len;')
_c(' char *xcb_tmp;')
+ num_fds = len([field for field in param_fields if field.isfd])
+ if num_fds > 0:
+ _c(' int fds[%d];' % (num_fds))
_c('')
# fixed size fields
@@ -2398,11 +2401,16 @@ def _c_request_helper(self, name, void, regular, aux=False, reply_fds=False):
# no padding necessary - _serialize() keeps track of padding automatically
_c('')
+ fd_index = 0
for field in param_fields:
if field.isfd:
- _c(' xcb_send_fd(c, %s);', field.c_field_name)
+ _c(' fds[%d] = %s;', fd_index, field.c_field_name)
+ fd_index = fd_index + 1
- _c(' xcb_ret.sequence = xcb_send_request(c, %s, xcb_parts + 2, &xcb_req);', func_flags)
+ if num_fds == 0:
+ _c(' xcb_ret.sequence = xcb_send_request(c, %s, xcb_parts + 2, &xcb_req);', func_flags)
+ else:
+ _c(' xcb_ret.sequence = xcb_send_request_with_fds(c, %s, xcb_parts + 2, &xcb_req, %d, fds);', func_flags, num_fds)
# free dyn. all. data, if any
for f in free_calls: