Home | History | Annotate | Line # | Download | only in files
      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
     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
     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
     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
     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 *
     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
     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
    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
    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
    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
    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
    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
    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
    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 *
    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
    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
    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
    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
    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
    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
    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 *
    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 *
    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