xref: /netbsd/external/mit/xorg/lib/libxcb/files/shm.c (revision e6a29d46)
1 /*
2  * This file generated automatically from shm.xml by c_client.py.
3  * Edit at your peril.
4  */
5 
6 #ifdef HAVE_CONFIG_H
7 #include "config.h"
8 #endif
9 #include <stdlib.h>
10 #include <string.h>
11 #include <assert.h>
12 #include <stddef.h>  /* for offsetof() */
13 #include "xcbext.h"
14 #include "shm.h"
15 
16 #define ALIGNOF(type) offsetof(struct { char dummy; type member; }, member)
17 #include "xproto.h"
18 
19 xcb_extension_t xcb_shm_id = { "MIT-SHM", 0 };
20 
21 void
xcb_shm_seg_next(xcb_shm_seg_iterator_t * i)22 xcb_shm_seg_next (xcb_shm_seg_iterator_t *i)
23 {
24     --i->rem;
25     ++i->data;
26     i->index += sizeof(xcb_shm_seg_t);
27 }
28 
29 xcb_generic_iterator_t
xcb_shm_seg_end(xcb_shm_seg_iterator_t i)30 xcb_shm_seg_end (xcb_shm_seg_iterator_t i)
31 {
32     xcb_generic_iterator_t ret;
33     ret.data = i.data + i.rem;
34     ret.index = i.index + ((char *) ret.data - (char *) i.data);
35     ret.rem = 0;
36     return ret;
37 }
38 
39 xcb_shm_query_version_cookie_t
xcb_shm_query_version(xcb_connection_t * c)40 xcb_shm_query_version (xcb_connection_t *c)
41 {
42     static const xcb_protocol_request_t xcb_req = {
43         .count = 2,
44         .ext = &xcb_shm_id,
45         .opcode = XCB_SHM_QUERY_VERSION,
46         .isvoid = 0
47     };
48 
49     struct iovec xcb_parts[4];
50     xcb_shm_query_version_cookie_t xcb_ret;
51     xcb_shm_query_version_request_t xcb_out;
52 
53 
54     xcb_parts[2].iov_base = (char *) &xcb_out;
55     xcb_parts[2].iov_len = sizeof(xcb_out);
56     xcb_parts[3].iov_base = 0;
57     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
58 
59     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
60     return xcb_ret;
61 }
62 
63 xcb_shm_query_version_cookie_t
xcb_shm_query_version_unchecked(xcb_connection_t * c)64 xcb_shm_query_version_unchecked (xcb_connection_t *c)
65 {
66     static const xcb_protocol_request_t xcb_req = {
67         .count = 2,
68         .ext = &xcb_shm_id,
69         .opcode = XCB_SHM_QUERY_VERSION,
70         .isvoid = 0
71     };
72 
73     struct iovec xcb_parts[4];
74     xcb_shm_query_version_cookie_t xcb_ret;
75     xcb_shm_query_version_request_t xcb_out;
76 
77 
78     xcb_parts[2].iov_base = (char *) &xcb_out;
79     xcb_parts[2].iov_len = sizeof(xcb_out);
80     xcb_parts[3].iov_base = 0;
81     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
82 
83     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
84     return xcb_ret;
85 }
86 
87 xcb_shm_query_version_reply_t *
xcb_shm_query_version_reply(xcb_connection_t * c,xcb_shm_query_version_cookie_t cookie,xcb_generic_error_t ** e)88 xcb_shm_query_version_reply (xcb_connection_t                *c,
89                              xcb_shm_query_version_cookie_t   cookie  /**< */,
90                              xcb_generic_error_t            **e)
91 {
92     return (xcb_shm_query_version_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
93 }
94 
95 xcb_void_cookie_t
xcb_shm_attach_checked(xcb_connection_t * c,xcb_shm_seg_t shmseg,uint32_t shmid,uint8_t read_only)96 xcb_shm_attach_checked (xcb_connection_t *c,
97                         xcb_shm_seg_t     shmseg,
98                         uint32_t          shmid,
99                         uint8_t           read_only)
100 {
101     static const xcb_protocol_request_t xcb_req = {
102         .count = 2,
103         .ext = &xcb_shm_id,
104         .opcode = XCB_SHM_ATTACH,
105         .isvoid = 1
106     };
107 
108     struct iovec xcb_parts[4];
109     xcb_void_cookie_t xcb_ret;
110     xcb_shm_attach_request_t xcb_out;
111 
112     xcb_out.shmseg = shmseg;
113     xcb_out.shmid = shmid;
114     xcb_out.read_only = read_only;
115     memset(xcb_out.pad0, 0, 3);
116 
117     xcb_parts[2].iov_base = (char *) &xcb_out;
118     xcb_parts[2].iov_len = sizeof(xcb_out);
119     xcb_parts[3].iov_base = 0;
120     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
121 
122     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
123     return xcb_ret;
124 }
125 
126 xcb_void_cookie_t
xcb_shm_attach(xcb_connection_t * c,xcb_shm_seg_t shmseg,uint32_t shmid,uint8_t read_only)127 xcb_shm_attach (xcb_connection_t *c,
128                 xcb_shm_seg_t     shmseg,
129                 uint32_t          shmid,
130                 uint8_t           read_only)
131 {
132     static const xcb_protocol_request_t xcb_req = {
133         .count = 2,
134         .ext = &xcb_shm_id,
135         .opcode = XCB_SHM_ATTACH,
136         .isvoid = 1
137     };
138 
139     struct iovec xcb_parts[4];
140     xcb_void_cookie_t xcb_ret;
141     xcb_shm_attach_request_t xcb_out;
142 
143     xcb_out.shmseg = shmseg;
144     xcb_out.shmid = shmid;
145     xcb_out.read_only = read_only;
146     memset(xcb_out.pad0, 0, 3);
147 
148     xcb_parts[2].iov_base = (char *) &xcb_out;
149     xcb_parts[2].iov_len = sizeof(xcb_out);
150     xcb_parts[3].iov_base = 0;
151     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
152 
153     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
154     return xcb_ret;
155 }
156 
157 xcb_void_cookie_t
xcb_shm_detach_checked(xcb_connection_t * c,xcb_shm_seg_t shmseg)158 xcb_shm_detach_checked (xcb_connection_t *c,
159                         xcb_shm_seg_t     shmseg)
160 {
161     static const xcb_protocol_request_t xcb_req = {
162         .count = 2,
163         .ext = &xcb_shm_id,
164         .opcode = XCB_SHM_DETACH,
165         .isvoid = 1
166     };
167 
168     struct iovec xcb_parts[4];
169     xcb_void_cookie_t xcb_ret;
170     xcb_shm_detach_request_t xcb_out;
171 
172     xcb_out.shmseg = shmseg;
173 
174     xcb_parts[2].iov_base = (char *) &xcb_out;
175     xcb_parts[2].iov_len = sizeof(xcb_out);
176     xcb_parts[3].iov_base = 0;
177     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
178 
179     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
180     return xcb_ret;
181 }
182 
183 xcb_void_cookie_t
xcb_shm_detach(xcb_connection_t * c,xcb_shm_seg_t shmseg)184 xcb_shm_detach (xcb_connection_t *c,
185                 xcb_shm_seg_t     shmseg)
186 {
187     static const xcb_protocol_request_t xcb_req = {
188         .count = 2,
189         .ext = &xcb_shm_id,
190         .opcode = XCB_SHM_DETACH,
191         .isvoid = 1
192     };
193 
194     struct iovec xcb_parts[4];
195     xcb_void_cookie_t xcb_ret;
196     xcb_shm_detach_request_t xcb_out;
197 
198     xcb_out.shmseg = shmseg;
199 
200     xcb_parts[2].iov_base = (char *) &xcb_out;
201     xcb_parts[2].iov_len = sizeof(xcb_out);
202     xcb_parts[3].iov_base = 0;
203     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
204 
205     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
206     return xcb_ret;
207 }
208 
209 xcb_void_cookie_t
xcb_shm_put_image_checked(xcb_connection_t * c,xcb_drawable_t drawable,xcb_gcontext_t gc,uint16_t total_width,uint16_t total_height,uint16_t src_x,uint16_t src_y,uint16_t src_width,uint16_t src_height,int16_t dst_x,int16_t dst_y,uint8_t depth,uint8_t format,uint8_t send_event,xcb_shm_seg_t shmseg,uint32_t offset)210 xcb_shm_put_image_checked (xcb_connection_t *c,
211                            xcb_drawable_t    drawable,
212                            xcb_gcontext_t    gc,
213                            uint16_t          total_width,
214                            uint16_t          total_height,
215                            uint16_t          src_x,
216                            uint16_t          src_y,
217                            uint16_t          src_width,
218                            uint16_t          src_height,
219                            int16_t           dst_x,
220                            int16_t           dst_y,
221                            uint8_t           depth,
222                            uint8_t           format,
223                            uint8_t           send_event,
224                            xcb_shm_seg_t     shmseg,
225                            uint32_t          offset)
226 {
227     static const xcb_protocol_request_t xcb_req = {
228         .count = 2,
229         .ext = &xcb_shm_id,
230         .opcode = XCB_SHM_PUT_IMAGE,
231         .isvoid = 1
232     };
233 
234     struct iovec xcb_parts[4];
235     xcb_void_cookie_t xcb_ret;
236     xcb_shm_put_image_request_t xcb_out;
237 
238     xcb_out.drawable = drawable;
239     xcb_out.gc = gc;
240     xcb_out.total_width = total_width;
241     xcb_out.total_height = total_height;
242     xcb_out.src_x = src_x;
243     xcb_out.src_y = src_y;
244     xcb_out.src_width = src_width;
245     xcb_out.src_height = src_height;
246     xcb_out.dst_x = dst_x;
247     xcb_out.dst_y = dst_y;
248     xcb_out.depth = depth;
249     xcb_out.format = format;
250     xcb_out.send_event = send_event;
251     xcb_out.pad0 = 0;
252     xcb_out.shmseg = shmseg;
253     xcb_out.offset = offset;
254 
255     xcb_parts[2].iov_base = (char *) &xcb_out;
256     xcb_parts[2].iov_len = sizeof(xcb_out);
257     xcb_parts[3].iov_base = 0;
258     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
259 
260     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
261     return xcb_ret;
262 }
263 
264 xcb_void_cookie_t
xcb_shm_put_image(xcb_connection_t * c,xcb_drawable_t drawable,xcb_gcontext_t gc,uint16_t total_width,uint16_t total_height,uint16_t src_x,uint16_t src_y,uint16_t src_width,uint16_t src_height,int16_t dst_x,int16_t dst_y,uint8_t depth,uint8_t format,uint8_t send_event,xcb_shm_seg_t shmseg,uint32_t offset)265 xcb_shm_put_image (xcb_connection_t *c,
266                    xcb_drawable_t    drawable,
267                    xcb_gcontext_t    gc,
268                    uint16_t          total_width,
269                    uint16_t          total_height,
270                    uint16_t          src_x,
271                    uint16_t          src_y,
272                    uint16_t          src_width,
273                    uint16_t          src_height,
274                    int16_t           dst_x,
275                    int16_t           dst_y,
276                    uint8_t           depth,
277                    uint8_t           format,
278                    uint8_t           send_event,
279                    xcb_shm_seg_t     shmseg,
280                    uint32_t          offset)
281 {
282     static const xcb_protocol_request_t xcb_req = {
283         .count = 2,
284         .ext = &xcb_shm_id,
285         .opcode = XCB_SHM_PUT_IMAGE,
286         .isvoid = 1
287     };
288 
289     struct iovec xcb_parts[4];
290     xcb_void_cookie_t xcb_ret;
291     xcb_shm_put_image_request_t xcb_out;
292 
293     xcb_out.drawable = drawable;
294     xcb_out.gc = gc;
295     xcb_out.total_width = total_width;
296     xcb_out.total_height = total_height;
297     xcb_out.src_x = src_x;
298     xcb_out.src_y = src_y;
299     xcb_out.src_width = src_width;
300     xcb_out.src_height = src_height;
301     xcb_out.dst_x = dst_x;
302     xcb_out.dst_y = dst_y;
303     xcb_out.depth = depth;
304     xcb_out.format = format;
305     xcb_out.send_event = send_event;
306     xcb_out.pad0 = 0;
307     xcb_out.shmseg = shmseg;
308     xcb_out.offset = offset;
309 
310     xcb_parts[2].iov_base = (char *) &xcb_out;
311     xcb_parts[2].iov_len = sizeof(xcb_out);
312     xcb_parts[3].iov_base = 0;
313     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
314 
315     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
316     return xcb_ret;
317 }
318 
319 xcb_shm_get_image_cookie_t
xcb_shm_get_image(xcb_connection_t * c,xcb_drawable_t drawable,int16_t x,int16_t y,uint16_t width,uint16_t height,uint32_t plane_mask,uint8_t format,xcb_shm_seg_t shmseg,uint32_t offset)320 xcb_shm_get_image (xcb_connection_t *c,
321                    xcb_drawable_t    drawable,
322                    int16_t           x,
323                    int16_t           y,
324                    uint16_t          width,
325                    uint16_t          height,
326                    uint32_t          plane_mask,
327                    uint8_t           format,
328                    xcb_shm_seg_t     shmseg,
329                    uint32_t          offset)
330 {
331     static const xcb_protocol_request_t xcb_req = {
332         .count = 2,
333         .ext = &xcb_shm_id,
334         .opcode = XCB_SHM_GET_IMAGE,
335         .isvoid = 0
336     };
337 
338     struct iovec xcb_parts[4];
339     xcb_shm_get_image_cookie_t xcb_ret;
340     xcb_shm_get_image_request_t xcb_out;
341 
342     xcb_out.drawable = drawable;
343     xcb_out.x = x;
344     xcb_out.y = y;
345     xcb_out.width = width;
346     xcb_out.height = height;
347     xcb_out.plane_mask = plane_mask;
348     xcb_out.format = format;
349     memset(xcb_out.pad0, 0, 3);
350     xcb_out.shmseg = shmseg;
351     xcb_out.offset = offset;
352 
353     xcb_parts[2].iov_base = (char *) &xcb_out;
354     xcb_parts[2].iov_len = sizeof(xcb_out);
355     xcb_parts[3].iov_base = 0;
356     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
357 
358     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
359     return xcb_ret;
360 }
361 
362 xcb_shm_get_image_cookie_t
xcb_shm_get_image_unchecked(xcb_connection_t * c,xcb_drawable_t drawable,int16_t x,int16_t y,uint16_t width,uint16_t height,uint32_t plane_mask,uint8_t format,xcb_shm_seg_t shmseg,uint32_t offset)363 xcb_shm_get_image_unchecked (xcb_connection_t *c,
364                              xcb_drawable_t    drawable,
365                              int16_t           x,
366                              int16_t           y,
367                              uint16_t          width,
368                              uint16_t          height,
369                              uint32_t          plane_mask,
370                              uint8_t           format,
371                              xcb_shm_seg_t     shmseg,
372                              uint32_t          offset)
373 {
374     static const xcb_protocol_request_t xcb_req = {
375         .count = 2,
376         .ext = &xcb_shm_id,
377         .opcode = XCB_SHM_GET_IMAGE,
378         .isvoid = 0
379     };
380 
381     struct iovec xcb_parts[4];
382     xcb_shm_get_image_cookie_t xcb_ret;
383     xcb_shm_get_image_request_t xcb_out;
384 
385     xcb_out.drawable = drawable;
386     xcb_out.x = x;
387     xcb_out.y = y;
388     xcb_out.width = width;
389     xcb_out.height = height;
390     xcb_out.plane_mask = plane_mask;
391     xcb_out.format = format;
392     memset(xcb_out.pad0, 0, 3);
393     xcb_out.shmseg = shmseg;
394     xcb_out.offset = offset;
395 
396     xcb_parts[2].iov_base = (char *) &xcb_out;
397     xcb_parts[2].iov_len = sizeof(xcb_out);
398     xcb_parts[3].iov_base = 0;
399     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
400 
401     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
402     return xcb_ret;
403 }
404 
405 xcb_shm_get_image_reply_t *
xcb_shm_get_image_reply(xcb_connection_t * c,xcb_shm_get_image_cookie_t cookie,xcb_generic_error_t ** e)406 xcb_shm_get_image_reply (xcb_connection_t            *c,
407                          xcb_shm_get_image_cookie_t   cookie  /**< */,
408                          xcb_generic_error_t        **e)
409 {
410     return (xcb_shm_get_image_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
411 }
412 
413 xcb_void_cookie_t
xcb_shm_create_pixmap_checked(xcb_connection_t * c,xcb_pixmap_t pid,xcb_drawable_t drawable,uint16_t width,uint16_t height,uint8_t depth,xcb_shm_seg_t shmseg,uint32_t offset)414 xcb_shm_create_pixmap_checked (xcb_connection_t *c,
415                                xcb_pixmap_t      pid,
416                                xcb_drawable_t    drawable,
417                                uint16_t          width,
418                                uint16_t          height,
419                                uint8_t           depth,
420                                xcb_shm_seg_t     shmseg,
421                                uint32_t          offset)
422 {
423     static const xcb_protocol_request_t xcb_req = {
424         .count = 2,
425         .ext = &xcb_shm_id,
426         .opcode = XCB_SHM_CREATE_PIXMAP,
427         .isvoid = 1
428     };
429 
430     struct iovec xcb_parts[4];
431     xcb_void_cookie_t xcb_ret;
432     xcb_shm_create_pixmap_request_t xcb_out;
433 
434     xcb_out.pid = pid;
435     xcb_out.drawable = drawable;
436     xcb_out.width = width;
437     xcb_out.height = height;
438     xcb_out.depth = depth;
439     memset(xcb_out.pad0, 0, 3);
440     xcb_out.shmseg = shmseg;
441     xcb_out.offset = offset;
442 
443     xcb_parts[2].iov_base = (char *) &xcb_out;
444     xcb_parts[2].iov_len = sizeof(xcb_out);
445     xcb_parts[3].iov_base = 0;
446     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
447 
448     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
449     return xcb_ret;
450 }
451 
452 xcb_void_cookie_t
xcb_shm_create_pixmap(xcb_connection_t * c,xcb_pixmap_t pid,xcb_drawable_t drawable,uint16_t width,uint16_t height,uint8_t depth,xcb_shm_seg_t shmseg,uint32_t offset)453 xcb_shm_create_pixmap (xcb_connection_t *c,
454                        xcb_pixmap_t      pid,
455                        xcb_drawable_t    drawable,
456                        uint16_t          width,
457                        uint16_t          height,
458                        uint8_t           depth,
459                        xcb_shm_seg_t     shmseg,
460                        uint32_t          offset)
461 {
462     static const xcb_protocol_request_t xcb_req = {
463         .count = 2,
464         .ext = &xcb_shm_id,
465         .opcode = XCB_SHM_CREATE_PIXMAP,
466         .isvoid = 1
467     };
468 
469     struct iovec xcb_parts[4];
470     xcb_void_cookie_t xcb_ret;
471     xcb_shm_create_pixmap_request_t xcb_out;
472 
473     xcb_out.pid = pid;
474     xcb_out.drawable = drawable;
475     xcb_out.width = width;
476     xcb_out.height = height;
477     xcb_out.depth = depth;
478     memset(xcb_out.pad0, 0, 3);
479     xcb_out.shmseg = shmseg;
480     xcb_out.offset = offset;
481 
482     xcb_parts[2].iov_base = (char *) &xcb_out;
483     xcb_parts[2].iov_len = sizeof(xcb_out);
484     xcb_parts[3].iov_base = 0;
485     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
486 
487     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
488     return xcb_ret;
489 }
490 
491 xcb_void_cookie_t
xcb_shm_attach_fd_checked(xcb_connection_t * c,xcb_shm_seg_t shmseg,int32_t shm_fd,uint8_t read_only)492 xcb_shm_attach_fd_checked (xcb_connection_t *c,
493                            xcb_shm_seg_t     shmseg,
494                            int32_t           shm_fd,
495                            uint8_t           read_only)
496 {
497     static const xcb_protocol_request_t xcb_req = {
498         .count = 2,
499         .ext = &xcb_shm_id,
500         .opcode = XCB_SHM_ATTACH_FD,
501         .isvoid = 1
502     };
503 
504     struct iovec xcb_parts[4];
505     xcb_void_cookie_t xcb_ret;
506     xcb_shm_attach_fd_request_t xcb_out;
507     int fds[1];
508     int fd_index = 0;
509 
510     xcb_out.shmseg = shmseg;
511     xcb_out.read_only = read_only;
512     memset(xcb_out.pad0, 0, 3);
513 
514     xcb_parts[2].iov_base = (char *) &xcb_out;
515     xcb_parts[2].iov_len = sizeof(xcb_out);
516     xcb_parts[3].iov_base = 0;
517     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
518 
519     fds[fd_index++] = shm_fd;
520     xcb_ret.sequence = xcb_send_request_with_fds(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req, 1, fds);
521     return xcb_ret;
522 }
523 
524 xcb_void_cookie_t
xcb_shm_attach_fd(xcb_connection_t * c,xcb_shm_seg_t shmseg,int32_t shm_fd,uint8_t read_only)525 xcb_shm_attach_fd (xcb_connection_t *c,
526                    xcb_shm_seg_t     shmseg,
527                    int32_t           shm_fd,
528                    uint8_t           read_only)
529 {
530     static const xcb_protocol_request_t xcb_req = {
531         .count = 2,
532         .ext = &xcb_shm_id,
533         .opcode = XCB_SHM_ATTACH_FD,
534         .isvoid = 1
535     };
536 
537     struct iovec xcb_parts[4];
538     xcb_void_cookie_t xcb_ret;
539     xcb_shm_attach_fd_request_t xcb_out;
540     int fds[1];
541     int fd_index = 0;
542 
543     xcb_out.shmseg = shmseg;
544     xcb_out.read_only = read_only;
545     memset(xcb_out.pad0, 0, 3);
546 
547     xcb_parts[2].iov_base = (char *) &xcb_out;
548     xcb_parts[2].iov_len = sizeof(xcb_out);
549     xcb_parts[3].iov_base = 0;
550     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
551 
552     fds[fd_index++] = shm_fd;
553     xcb_ret.sequence = xcb_send_request_with_fds(c, 0, xcb_parts + 2, &xcb_req, 1, fds);
554     return xcb_ret;
555 }
556 
557 xcb_shm_create_segment_cookie_t
xcb_shm_create_segment(xcb_connection_t * c,xcb_shm_seg_t shmseg,uint32_t size,uint8_t read_only)558 xcb_shm_create_segment (xcb_connection_t *c,
559                         xcb_shm_seg_t     shmseg,
560                         uint32_t          size,
561                         uint8_t           read_only)
562 {
563     static const xcb_protocol_request_t xcb_req = {
564         .count = 2,
565         .ext = &xcb_shm_id,
566         .opcode = XCB_SHM_CREATE_SEGMENT,
567         .isvoid = 0
568     };
569 
570     struct iovec xcb_parts[4];
571     xcb_shm_create_segment_cookie_t xcb_ret;
572     xcb_shm_create_segment_request_t xcb_out;
573 
574     xcb_out.shmseg = shmseg;
575     xcb_out.size = size;
576     xcb_out.read_only = read_only;
577     memset(xcb_out.pad0, 0, 3);
578 
579     xcb_parts[2].iov_base = (char *) &xcb_out;
580     xcb_parts[2].iov_len = sizeof(xcb_out);
581     xcb_parts[3].iov_base = 0;
582     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
583 
584     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED|XCB_REQUEST_REPLY_FDS, xcb_parts + 2, &xcb_req);
585     return xcb_ret;
586 }
587 
588 xcb_shm_create_segment_cookie_t
xcb_shm_create_segment_unchecked(xcb_connection_t * c,xcb_shm_seg_t shmseg,uint32_t size,uint8_t read_only)589 xcb_shm_create_segment_unchecked (xcb_connection_t *c,
590                                   xcb_shm_seg_t     shmseg,
591                                   uint32_t          size,
592                                   uint8_t           read_only)
593 {
594     static const xcb_protocol_request_t xcb_req = {
595         .count = 2,
596         .ext = &xcb_shm_id,
597         .opcode = XCB_SHM_CREATE_SEGMENT,
598         .isvoid = 0
599     };
600 
601     struct iovec xcb_parts[4];
602     xcb_shm_create_segment_cookie_t xcb_ret;
603     xcb_shm_create_segment_request_t xcb_out;
604 
605     xcb_out.shmseg = shmseg;
606     xcb_out.size = size;
607     xcb_out.read_only = read_only;
608     memset(xcb_out.pad0, 0, 3);
609 
610     xcb_parts[2].iov_base = (char *) &xcb_out;
611     xcb_parts[2].iov_len = sizeof(xcb_out);
612     xcb_parts[3].iov_base = 0;
613     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
614 
615     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_REPLY_FDS, xcb_parts + 2, &xcb_req);
616     return xcb_ret;
617 }
618 
619 xcb_shm_create_segment_reply_t *
xcb_shm_create_segment_reply(xcb_connection_t * c,xcb_shm_create_segment_cookie_t cookie,xcb_generic_error_t ** e)620 xcb_shm_create_segment_reply (xcb_connection_t                 *c,
621                               xcb_shm_create_segment_cookie_t   cookie  /**< */,
622                               xcb_generic_error_t             **e)
623 {
624     return (xcb_shm_create_segment_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
625 }
626 
627 int *
xcb_shm_create_segment_reply_fds(xcb_connection_t * c,xcb_shm_create_segment_reply_t * reply)628 xcb_shm_create_segment_reply_fds (xcb_connection_t                *c  /**< */,
629                                   xcb_shm_create_segment_reply_t  *reply)
630 {
631     return xcb_get_reply_fds(c, reply, sizeof(xcb_shm_create_segment_reply_t) + 4 * reply->length);
632 }
633 
634