Home | History | Annotate | Line # | Download | only in files
sync.c revision 1.5
      1 /*
      2  * This file generated automatically from sync.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 "sync.h"
     15 
     16 #define ALIGNOF(type) offsetof(struct { char dummy; type member; }, member)
     17 #include "xproto.h"
     18 
     19 xcb_extension_t xcb_sync_id = { "SYNC", 0 };
     20 
     21 void
     22 xcb_sync_alarm_next (xcb_sync_alarm_iterator_t *i)
     23 {
     24     --i->rem;
     25     ++i->data;
     26     i->index += sizeof(xcb_sync_alarm_t);
     27 }
     28 
     29 xcb_generic_iterator_t
     30 xcb_sync_alarm_end (xcb_sync_alarm_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 void
     40 xcb_sync_counter_next (xcb_sync_counter_iterator_t *i)
     41 {
     42     --i->rem;
     43     ++i->data;
     44     i->index += sizeof(xcb_sync_counter_t);
     45 }
     46 
     47 xcb_generic_iterator_t
     48 xcb_sync_counter_end (xcb_sync_counter_iterator_t i)
     49 {
     50     xcb_generic_iterator_t ret;
     51     ret.data = i.data + i.rem;
     52     ret.index = i.index + ((char *) ret.data - (char *) i.data);
     53     ret.rem = 0;
     54     return ret;
     55 }
     56 
     57 void
     58 xcb_sync_fence_next (xcb_sync_fence_iterator_t *i)
     59 {
     60     --i->rem;
     61     ++i->data;
     62     i->index += sizeof(xcb_sync_fence_t);
     63 }
     64 
     65 xcb_generic_iterator_t
     66 xcb_sync_fence_end (xcb_sync_fence_iterator_t i)
     67 {
     68     xcb_generic_iterator_t ret;
     69     ret.data = i.data + i.rem;
     70     ret.index = i.index + ((char *) ret.data - (char *) i.data);
     71     ret.rem = 0;
     72     return ret;
     73 }
     74 
     75 void
     76 xcb_sync_int64_next (xcb_sync_int64_iterator_t *i)
     77 {
     78     --i->rem;
     79     ++i->data;
     80     i->index += sizeof(xcb_sync_int64_t);
     81 }
     82 
     83 xcb_generic_iterator_t
     84 xcb_sync_int64_end (xcb_sync_int64_iterator_t i)
     85 {
     86     xcb_generic_iterator_t ret;
     87     ret.data = i.data + i.rem;
     88     ret.index = i.index + ((char *) ret.data - (char *) i.data);
     89     ret.rem = 0;
     90     return ret;
     91 }
     92 
     93 int
     94 xcb_sync_systemcounter_sizeof (const void  *_buffer)
     95 {
     96     char *xcb_tmp = (char *)_buffer;
     97     const xcb_sync_systemcounter_t *_aux = (xcb_sync_systemcounter_t *)_buffer;
     98     unsigned int xcb_buffer_len = 0;
     99     unsigned int xcb_block_len = 0;
    100     unsigned int xcb_pad = 0;
    101     unsigned int xcb_align_to = 0;
    102 
    103 
    104     xcb_block_len += sizeof(xcb_sync_systemcounter_t);
    105     xcb_tmp += xcb_block_len;
    106     xcb_buffer_len += xcb_block_len;
    107     xcb_block_len = 0;
    108     /* name */
    109     xcb_block_len += _aux->name_len * sizeof(char);
    110     xcb_tmp += xcb_block_len;
    111     xcb_align_to = ALIGNOF(char);
    112     xcb_align_to = 4;
    113     /* insert padding */
    114     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    115     xcb_buffer_len += xcb_block_len + xcb_pad;
    116     if (0 != xcb_pad) {
    117         xcb_tmp += xcb_pad;
    118         xcb_pad = 0;
    119     }
    120     xcb_block_len = 0;
    121     /* insert padding */
    122     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    123     xcb_buffer_len += xcb_block_len + xcb_pad;
    124     if (0 != xcb_pad) {
    125         xcb_tmp += xcb_pad;
    126         xcb_pad = 0;
    127     }
    128     xcb_block_len = 0;
    129 
    130     return xcb_buffer_len;
    131 }
    132 
    133 char *
    134 xcb_sync_systemcounter_name (const xcb_sync_systemcounter_t *R)
    135 {
    136     return (char *) (R + 1);
    137 }
    138 
    139 int
    140 xcb_sync_systemcounter_name_length (const xcb_sync_systemcounter_t *R)
    141 {
    142     return R->name_len;
    143 }
    144 
    145 xcb_generic_iterator_t
    146 xcb_sync_systemcounter_name_end (const xcb_sync_systemcounter_t *R)
    147 {
    148     xcb_generic_iterator_t i;
    149     i.data = ((char *) (R + 1)) + (R->name_len);
    150     i.rem = 0;
    151     i.index = (char *) i.data - (char *) R;
    152     return i;
    153 }
    154 
    155 void
    156 xcb_sync_systemcounter_next (xcb_sync_systemcounter_iterator_t *i)
    157 {
    158     xcb_sync_systemcounter_t *R = i->data;
    159     xcb_generic_iterator_t child;
    160     child.data = (xcb_sync_systemcounter_t *)(((char *)R) + xcb_sync_systemcounter_sizeof(R));
    161     i->index = (char *) child.data - (char *) i->data;
    162     --i->rem;
    163     i->data = (xcb_sync_systemcounter_t *) child.data;
    164 }
    165 
    166 xcb_generic_iterator_t
    167 xcb_sync_systemcounter_end (xcb_sync_systemcounter_iterator_t i)
    168 {
    169     xcb_generic_iterator_t ret;
    170     while(i.rem > 0)
    171         xcb_sync_systemcounter_next(&i);
    172     ret.data = i.data;
    173     ret.rem = i.rem;
    174     ret.index = i.index;
    175     return ret;
    176 }
    177 
    178 void
    179 xcb_sync_trigger_next (xcb_sync_trigger_iterator_t *i)
    180 {
    181     --i->rem;
    182     ++i->data;
    183     i->index += sizeof(xcb_sync_trigger_t);
    184 }
    185 
    186 xcb_generic_iterator_t
    187 xcb_sync_trigger_end (xcb_sync_trigger_iterator_t i)
    188 {
    189     xcb_generic_iterator_t ret;
    190     ret.data = i.data + i.rem;
    191     ret.index = i.index + ((char *) ret.data - (char *) i.data);
    192     ret.rem = 0;
    193     return ret;
    194 }
    195 
    196 void
    197 xcb_sync_waitcondition_next (xcb_sync_waitcondition_iterator_t *i)
    198 {
    199     --i->rem;
    200     ++i->data;
    201     i->index += sizeof(xcb_sync_waitcondition_t);
    202 }
    203 
    204 xcb_generic_iterator_t
    205 xcb_sync_waitcondition_end (xcb_sync_waitcondition_iterator_t i)
    206 {
    207     xcb_generic_iterator_t ret;
    208     ret.data = i.data + i.rem;
    209     ret.index = i.index + ((char *) ret.data - (char *) i.data);
    210     ret.rem = 0;
    211     return ret;
    212 }
    213 
    214 xcb_sync_initialize_cookie_t
    215 xcb_sync_initialize (xcb_connection_t *c,
    216                      uint8_t           desired_major_version,
    217                      uint8_t           desired_minor_version)
    218 {
    219     static const xcb_protocol_request_t xcb_req = {
    220         .count = 2,
    221         .ext = &xcb_sync_id,
    222         .opcode = XCB_SYNC_INITIALIZE,
    223         .isvoid = 0
    224     };
    225 
    226     struct iovec xcb_parts[4];
    227     xcb_sync_initialize_cookie_t xcb_ret;
    228     xcb_sync_initialize_request_t xcb_out;
    229 
    230     xcb_out.desired_major_version = desired_major_version;
    231     xcb_out.desired_minor_version = desired_minor_version;
    232 
    233     xcb_parts[2].iov_base = (char *) &xcb_out;
    234     xcb_parts[2].iov_len = sizeof(xcb_out);
    235     xcb_parts[3].iov_base = 0;
    236     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    237 
    238     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    239     return xcb_ret;
    240 }
    241 
    242 xcb_sync_initialize_cookie_t
    243 xcb_sync_initialize_unchecked (xcb_connection_t *c,
    244                                uint8_t           desired_major_version,
    245                                uint8_t           desired_minor_version)
    246 {
    247     static const xcb_protocol_request_t xcb_req = {
    248         .count = 2,
    249         .ext = &xcb_sync_id,
    250         .opcode = XCB_SYNC_INITIALIZE,
    251         .isvoid = 0
    252     };
    253 
    254     struct iovec xcb_parts[4];
    255     xcb_sync_initialize_cookie_t xcb_ret;
    256     xcb_sync_initialize_request_t xcb_out;
    257 
    258     xcb_out.desired_major_version = desired_major_version;
    259     xcb_out.desired_minor_version = desired_minor_version;
    260 
    261     xcb_parts[2].iov_base = (char *) &xcb_out;
    262     xcb_parts[2].iov_len = sizeof(xcb_out);
    263     xcb_parts[3].iov_base = 0;
    264     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    265 
    266     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    267     return xcb_ret;
    268 }
    269 
    270 xcb_sync_initialize_reply_t *
    271 xcb_sync_initialize_reply (xcb_connection_t              *c,
    272                            xcb_sync_initialize_cookie_t   cookie  /**< */,
    273                            xcb_generic_error_t          **e)
    274 {
    275     return (xcb_sync_initialize_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
    276 }
    277 
    278 int
    279 xcb_sync_list_system_counters_sizeof (const void  *_buffer)
    280 {
    281     char *xcb_tmp = (char *)_buffer;
    282     const xcb_sync_list_system_counters_reply_t *_aux = (xcb_sync_list_system_counters_reply_t *)_buffer;
    283     unsigned int xcb_buffer_len = 0;
    284     unsigned int xcb_block_len = 0;
    285     unsigned int xcb_pad = 0;
    286     unsigned int xcb_align_to = 0;
    287 
    288     unsigned int i;
    289     unsigned int xcb_tmp_len;
    290 
    291     xcb_block_len += sizeof(xcb_sync_list_system_counters_reply_t);
    292     xcb_tmp += xcb_block_len;
    293     xcb_buffer_len += xcb_block_len;
    294     xcb_block_len = 0;
    295     /* counters */
    296     for(i=0; i<_aux->counters_len; i++) {
    297         xcb_tmp_len = xcb_sync_systemcounter_sizeof(xcb_tmp);
    298         xcb_block_len += xcb_tmp_len;
    299         xcb_tmp += xcb_tmp_len;
    300     }
    301     xcb_align_to = ALIGNOF(xcb_sync_systemcounter_t);
    302     /* insert padding */
    303     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    304     xcb_buffer_len += xcb_block_len + xcb_pad;
    305     if (0 != xcb_pad) {
    306         xcb_tmp += xcb_pad;
    307         xcb_pad = 0;
    308     }
    309     xcb_block_len = 0;
    310 
    311     return xcb_buffer_len;
    312 }
    313 
    314 xcb_sync_list_system_counters_cookie_t
    315 xcb_sync_list_system_counters (xcb_connection_t *c)
    316 {
    317     static const xcb_protocol_request_t xcb_req = {
    318         .count = 2,
    319         .ext = &xcb_sync_id,
    320         .opcode = XCB_SYNC_LIST_SYSTEM_COUNTERS,
    321         .isvoid = 0
    322     };
    323 
    324     struct iovec xcb_parts[4];
    325     xcb_sync_list_system_counters_cookie_t xcb_ret;
    326     xcb_sync_list_system_counters_request_t xcb_out;
    327 
    328 
    329     xcb_parts[2].iov_base = (char *) &xcb_out;
    330     xcb_parts[2].iov_len = sizeof(xcb_out);
    331     xcb_parts[3].iov_base = 0;
    332     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    333 
    334     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    335     return xcb_ret;
    336 }
    337 
    338 xcb_sync_list_system_counters_cookie_t
    339 xcb_sync_list_system_counters_unchecked (xcb_connection_t *c)
    340 {
    341     static const xcb_protocol_request_t xcb_req = {
    342         .count = 2,
    343         .ext = &xcb_sync_id,
    344         .opcode = XCB_SYNC_LIST_SYSTEM_COUNTERS,
    345         .isvoid = 0
    346     };
    347 
    348     struct iovec xcb_parts[4];
    349     xcb_sync_list_system_counters_cookie_t xcb_ret;
    350     xcb_sync_list_system_counters_request_t xcb_out;
    351 
    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, 0, xcb_parts + 2, &xcb_req);
    359     return xcb_ret;
    360 }
    361 
    362 int
    363 xcb_sync_list_system_counters_counters_length (const xcb_sync_list_system_counters_reply_t *R)
    364 {
    365     return R->counters_len;
    366 }
    367 
    368 xcb_sync_systemcounter_iterator_t
    369 xcb_sync_list_system_counters_counters_iterator (const xcb_sync_list_system_counters_reply_t *R)
    370 {
    371     xcb_sync_systemcounter_iterator_t i;
    372     i.data = (xcb_sync_systemcounter_t *) (R + 1);
    373     i.rem = R->counters_len;
    374     i.index = (char *) i.data - (char *) R;
    375     return i;
    376 }
    377 
    378 xcb_sync_list_system_counters_reply_t *
    379 xcb_sync_list_system_counters_reply (xcb_connection_t                        *c,
    380                                      xcb_sync_list_system_counters_cookie_t   cookie  /**< */,
    381                                      xcb_generic_error_t                    **e)
    382 {
    383     return (xcb_sync_list_system_counters_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
    384 }
    385 
    386 xcb_void_cookie_t
    387 xcb_sync_create_counter_checked (xcb_connection_t   *c,
    388                                  xcb_sync_counter_t  id,
    389                                  xcb_sync_int64_t    initial_value)
    390 {
    391     static const xcb_protocol_request_t xcb_req = {
    392         .count = 2,
    393         .ext = &xcb_sync_id,
    394         .opcode = XCB_SYNC_CREATE_COUNTER,
    395         .isvoid = 1
    396     };
    397 
    398     struct iovec xcb_parts[4];
    399     xcb_void_cookie_t xcb_ret;
    400     xcb_sync_create_counter_request_t xcb_out;
    401 
    402     xcb_out.id = id;
    403     xcb_out.initial_value = initial_value;
    404 
    405     xcb_parts[2].iov_base = (char *) &xcb_out;
    406     xcb_parts[2].iov_len = sizeof(xcb_out);
    407     xcb_parts[3].iov_base = 0;
    408     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    409 
    410     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    411     return xcb_ret;
    412 }
    413 
    414 xcb_void_cookie_t
    415 xcb_sync_create_counter (xcb_connection_t   *c,
    416                          xcb_sync_counter_t  id,
    417                          xcb_sync_int64_t    initial_value)
    418 {
    419     static const xcb_protocol_request_t xcb_req = {
    420         .count = 2,
    421         .ext = &xcb_sync_id,
    422         .opcode = XCB_SYNC_CREATE_COUNTER,
    423         .isvoid = 1
    424     };
    425 
    426     struct iovec xcb_parts[4];
    427     xcb_void_cookie_t xcb_ret;
    428     xcb_sync_create_counter_request_t xcb_out;
    429 
    430     xcb_out.id = id;
    431     xcb_out.initial_value = initial_value;
    432 
    433     xcb_parts[2].iov_base = (char *) &xcb_out;
    434     xcb_parts[2].iov_len = sizeof(xcb_out);
    435     xcb_parts[3].iov_base = 0;
    436     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    437 
    438     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    439     return xcb_ret;
    440 }
    441 
    442 xcb_void_cookie_t
    443 xcb_sync_destroy_counter_checked (xcb_connection_t   *c,
    444                                   xcb_sync_counter_t  counter)
    445 {
    446     static const xcb_protocol_request_t xcb_req = {
    447         .count = 2,
    448         .ext = &xcb_sync_id,
    449         .opcode = XCB_SYNC_DESTROY_COUNTER,
    450         .isvoid = 1
    451     };
    452 
    453     struct iovec xcb_parts[4];
    454     xcb_void_cookie_t xcb_ret;
    455     xcb_sync_destroy_counter_request_t xcb_out;
    456 
    457     xcb_out.counter = counter;
    458 
    459     xcb_parts[2].iov_base = (char *) &xcb_out;
    460     xcb_parts[2].iov_len = sizeof(xcb_out);
    461     xcb_parts[3].iov_base = 0;
    462     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    463 
    464     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    465     return xcb_ret;
    466 }
    467 
    468 xcb_void_cookie_t
    469 xcb_sync_destroy_counter (xcb_connection_t   *c,
    470                           xcb_sync_counter_t  counter)
    471 {
    472     static const xcb_protocol_request_t xcb_req = {
    473         .count = 2,
    474         .ext = &xcb_sync_id,
    475         .opcode = XCB_SYNC_DESTROY_COUNTER,
    476         .isvoid = 1
    477     };
    478 
    479     struct iovec xcb_parts[4];
    480     xcb_void_cookie_t xcb_ret;
    481     xcb_sync_destroy_counter_request_t xcb_out;
    482 
    483     xcb_out.counter = counter;
    484 
    485     xcb_parts[2].iov_base = (char *) &xcb_out;
    486     xcb_parts[2].iov_len = sizeof(xcb_out);
    487     xcb_parts[3].iov_base = 0;
    488     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    489 
    490     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    491     return xcb_ret;
    492 }
    493 
    494 xcb_sync_query_counter_cookie_t
    495 xcb_sync_query_counter (xcb_connection_t   *c,
    496                         xcb_sync_counter_t  counter)
    497 {
    498     static const xcb_protocol_request_t xcb_req = {
    499         .count = 2,
    500         .ext = &xcb_sync_id,
    501         .opcode = XCB_SYNC_QUERY_COUNTER,
    502         .isvoid = 0
    503     };
    504 
    505     struct iovec xcb_parts[4];
    506     xcb_sync_query_counter_cookie_t xcb_ret;
    507     xcb_sync_query_counter_request_t xcb_out;
    508 
    509     xcb_out.counter = counter;
    510 
    511     xcb_parts[2].iov_base = (char *) &xcb_out;
    512     xcb_parts[2].iov_len = sizeof(xcb_out);
    513     xcb_parts[3].iov_base = 0;
    514     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    515 
    516     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    517     return xcb_ret;
    518 }
    519 
    520 xcb_sync_query_counter_cookie_t
    521 xcb_sync_query_counter_unchecked (xcb_connection_t   *c,
    522                                   xcb_sync_counter_t  counter)
    523 {
    524     static const xcb_protocol_request_t xcb_req = {
    525         .count = 2,
    526         .ext = &xcb_sync_id,
    527         .opcode = XCB_SYNC_QUERY_COUNTER,
    528         .isvoid = 0
    529     };
    530 
    531     struct iovec xcb_parts[4];
    532     xcb_sync_query_counter_cookie_t xcb_ret;
    533     xcb_sync_query_counter_request_t xcb_out;
    534 
    535     xcb_out.counter = counter;
    536 
    537     xcb_parts[2].iov_base = (char *) &xcb_out;
    538     xcb_parts[2].iov_len = sizeof(xcb_out);
    539     xcb_parts[3].iov_base = 0;
    540     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    541 
    542     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    543     return xcb_ret;
    544 }
    545 
    546 xcb_sync_query_counter_reply_t *
    547 xcb_sync_query_counter_reply (xcb_connection_t                 *c,
    548                               xcb_sync_query_counter_cookie_t   cookie  /**< */,
    549                               xcb_generic_error_t             **e)
    550 {
    551     return (xcb_sync_query_counter_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
    552 }
    553 
    554 int
    555 xcb_sync_await_sizeof (const void  *_buffer,
    556                        uint32_t     wait_list_len)
    557 {
    558     char *xcb_tmp = (char *)_buffer;
    559     unsigned int xcb_buffer_len = 0;
    560     unsigned int xcb_block_len = 0;
    561     unsigned int xcb_pad = 0;
    562     unsigned int xcb_align_to = 0;
    563 
    564 
    565     xcb_block_len += sizeof(xcb_sync_await_request_t);
    566     xcb_tmp += xcb_block_len;
    567     xcb_buffer_len += xcb_block_len;
    568     xcb_block_len = 0;
    569     /* wait_list */
    570     xcb_block_len += wait_list_len * sizeof(xcb_sync_waitcondition_t);
    571     xcb_tmp += xcb_block_len;
    572     xcb_align_to = ALIGNOF(xcb_sync_waitcondition_t);
    573     /* insert padding */
    574     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    575     xcb_buffer_len += xcb_block_len + xcb_pad;
    576     if (0 != xcb_pad) {
    577         xcb_tmp += xcb_pad;
    578         xcb_pad = 0;
    579     }
    580     xcb_block_len = 0;
    581 
    582     return xcb_buffer_len;
    583 }
    584 
    585 xcb_void_cookie_t
    586 xcb_sync_await_checked (xcb_connection_t               *c,
    587                         uint32_t                        wait_list_len,
    588                         const xcb_sync_waitcondition_t *wait_list)
    589 {
    590     static const xcb_protocol_request_t xcb_req = {
    591         .count = 4,
    592         .ext = &xcb_sync_id,
    593         .opcode = XCB_SYNC_AWAIT,
    594         .isvoid = 1
    595     };
    596 
    597     struct iovec xcb_parts[6];
    598     xcb_void_cookie_t xcb_ret;
    599     xcb_sync_await_request_t xcb_out;
    600 
    601 
    602     xcb_parts[2].iov_base = (char *) &xcb_out;
    603     xcb_parts[2].iov_len = sizeof(xcb_out);
    604     xcb_parts[3].iov_base = 0;
    605     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    606     /* xcb_sync_waitcondition_t wait_list */
    607     xcb_parts[4].iov_base = (char *) wait_list;
    608     xcb_parts[4].iov_len = wait_list_len * sizeof(xcb_sync_waitcondition_t);
    609     xcb_parts[5].iov_base = 0;
    610     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
    611 
    612     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    613     return xcb_ret;
    614 }
    615 
    616 xcb_void_cookie_t
    617 xcb_sync_await (xcb_connection_t               *c,
    618                 uint32_t                        wait_list_len,
    619                 const xcb_sync_waitcondition_t *wait_list)
    620 {
    621     static const xcb_protocol_request_t xcb_req = {
    622         .count = 4,
    623         .ext = &xcb_sync_id,
    624         .opcode = XCB_SYNC_AWAIT,
    625         .isvoid = 1
    626     };
    627 
    628     struct iovec xcb_parts[6];
    629     xcb_void_cookie_t xcb_ret;
    630     xcb_sync_await_request_t xcb_out;
    631 
    632 
    633     xcb_parts[2].iov_base = (char *) &xcb_out;
    634     xcb_parts[2].iov_len = sizeof(xcb_out);
    635     xcb_parts[3].iov_base = 0;
    636     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    637     /* xcb_sync_waitcondition_t wait_list */
    638     xcb_parts[4].iov_base = (char *) wait_list;
    639     xcb_parts[4].iov_len = wait_list_len * sizeof(xcb_sync_waitcondition_t);
    640     xcb_parts[5].iov_base = 0;
    641     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
    642 
    643     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    644     return xcb_ret;
    645 }
    646 
    647 xcb_sync_waitcondition_t *
    648 xcb_sync_await_wait_list (const xcb_sync_await_request_t *R)
    649 {
    650     return (xcb_sync_waitcondition_t *) (R + 1);
    651 }
    652 
    653 int
    654 xcb_sync_await_wait_list_length (const xcb_sync_await_request_t *R)
    655 {
    656     return (((R->length * 4) - sizeof(xcb_sync_await_request_t))/sizeof(xcb_sync_waitcondition_t));
    657 }
    658 
    659 xcb_sync_waitcondition_iterator_t
    660 xcb_sync_await_wait_list_iterator (const xcb_sync_await_request_t *R)
    661 {
    662     xcb_sync_waitcondition_iterator_t i;
    663     i.data = (xcb_sync_waitcondition_t *) (R + 1);
    664     i.rem = (((R->length * 4) - sizeof(xcb_sync_await_request_t))/sizeof(xcb_sync_waitcondition_t));
    665     i.index = (char *) i.data - (char *) R;
    666     return i;
    667 }
    668 
    669 xcb_void_cookie_t
    670 xcb_sync_change_counter_checked (xcb_connection_t   *c,
    671                                  xcb_sync_counter_t  counter,
    672                                  xcb_sync_int64_t    amount)
    673 {
    674     static const xcb_protocol_request_t xcb_req = {
    675         .count = 2,
    676         .ext = &xcb_sync_id,
    677         .opcode = XCB_SYNC_CHANGE_COUNTER,
    678         .isvoid = 1
    679     };
    680 
    681     struct iovec xcb_parts[4];
    682     xcb_void_cookie_t xcb_ret;
    683     xcb_sync_change_counter_request_t xcb_out;
    684 
    685     xcb_out.counter = counter;
    686     xcb_out.amount = amount;
    687 
    688     xcb_parts[2].iov_base = (char *) &xcb_out;
    689     xcb_parts[2].iov_len = sizeof(xcb_out);
    690     xcb_parts[3].iov_base = 0;
    691     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    692 
    693     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    694     return xcb_ret;
    695 }
    696 
    697 xcb_void_cookie_t
    698 xcb_sync_change_counter (xcb_connection_t   *c,
    699                          xcb_sync_counter_t  counter,
    700                          xcb_sync_int64_t    amount)
    701 {
    702     static const xcb_protocol_request_t xcb_req = {
    703         .count = 2,
    704         .ext = &xcb_sync_id,
    705         .opcode = XCB_SYNC_CHANGE_COUNTER,
    706         .isvoid = 1
    707     };
    708 
    709     struct iovec xcb_parts[4];
    710     xcb_void_cookie_t xcb_ret;
    711     xcb_sync_change_counter_request_t xcb_out;
    712 
    713     xcb_out.counter = counter;
    714     xcb_out.amount = amount;
    715 
    716     xcb_parts[2].iov_base = (char *) &xcb_out;
    717     xcb_parts[2].iov_len = sizeof(xcb_out);
    718     xcb_parts[3].iov_base = 0;
    719     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    720 
    721     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    722     return xcb_ret;
    723 }
    724 
    725 xcb_void_cookie_t
    726 xcb_sync_set_counter_checked (xcb_connection_t   *c,
    727                               xcb_sync_counter_t  counter,
    728                               xcb_sync_int64_t    value)
    729 {
    730     static const xcb_protocol_request_t xcb_req = {
    731         .count = 2,
    732         .ext = &xcb_sync_id,
    733         .opcode = XCB_SYNC_SET_COUNTER,
    734         .isvoid = 1
    735     };
    736 
    737     struct iovec xcb_parts[4];
    738     xcb_void_cookie_t xcb_ret;
    739     xcb_sync_set_counter_request_t xcb_out;
    740 
    741     xcb_out.counter = counter;
    742     xcb_out.value = value;
    743 
    744     xcb_parts[2].iov_base = (char *) &xcb_out;
    745     xcb_parts[2].iov_len = sizeof(xcb_out);
    746     xcb_parts[3].iov_base = 0;
    747     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    748 
    749     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    750     return xcb_ret;
    751 }
    752 
    753 xcb_void_cookie_t
    754 xcb_sync_set_counter (xcb_connection_t   *c,
    755                       xcb_sync_counter_t  counter,
    756                       xcb_sync_int64_t    value)
    757 {
    758     static const xcb_protocol_request_t xcb_req = {
    759         .count = 2,
    760         .ext = &xcb_sync_id,
    761         .opcode = XCB_SYNC_SET_COUNTER,
    762         .isvoid = 1
    763     };
    764 
    765     struct iovec xcb_parts[4];
    766     xcb_void_cookie_t xcb_ret;
    767     xcb_sync_set_counter_request_t xcb_out;
    768 
    769     xcb_out.counter = counter;
    770     xcb_out.value = value;
    771 
    772     xcb_parts[2].iov_base = (char *) &xcb_out;
    773     xcb_parts[2].iov_len = sizeof(xcb_out);
    774     xcb_parts[3].iov_base = 0;
    775     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    776 
    777     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    778     return xcb_ret;
    779 }
    780 
    781 int
    782 xcb_sync_create_alarm_value_list_serialize (void                                     **_buffer,
    783                                             uint32_t                                   value_mask,
    784                                             const xcb_sync_create_alarm_value_list_t  *_aux)
    785 {
    786     char *xcb_out = *_buffer;
    787     unsigned int xcb_buffer_len = 0;
    788     unsigned int xcb_align_to = 0;
    789     unsigned int xcb_padding_offset = 0;
    790 
    791     unsigned int xcb_pad = 0;
    792     char xcb_pad0[3] = {0, 0, 0};
    793     struct iovec xcb_parts[7];
    794     unsigned int xcb_parts_idx = 0;
    795     unsigned int xcb_block_len = 0;
    796     unsigned int i;
    797     char *xcb_tmp;
    798 
    799     if(value_mask & XCB_SYNC_CA_COUNTER) {
    800         /* xcb_sync_create_alarm_value_list_t.counter */
    801         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->counter;
    802         xcb_block_len += sizeof(xcb_sync_counter_t);
    803         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_sync_counter_t);
    804         xcb_parts_idx++;
    805         xcb_align_to = ALIGNOF(xcb_sync_counter_t);
    806     }
    807     if(value_mask & XCB_SYNC_CA_VALUE_TYPE) {
    808         /* xcb_sync_create_alarm_value_list_t.valueType */
    809         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valueType;
    810         xcb_block_len += sizeof(uint32_t);
    811         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
    812         xcb_parts_idx++;
    813         xcb_align_to = ALIGNOF(uint32_t);
    814     }
    815     if(value_mask & XCB_SYNC_CA_VALUE) {
    816         /* xcb_sync_create_alarm_value_list_t.value */
    817         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->value;
    818         xcb_block_len += sizeof(xcb_sync_int64_t);
    819         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_sync_int64_t);
    820         xcb_parts_idx++;
    821         xcb_align_to = ALIGNOF(xcb_sync_int64_t);
    822     }
    823     if(value_mask & XCB_SYNC_CA_TEST_TYPE) {
    824         /* xcb_sync_create_alarm_value_list_t.testType */
    825         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->testType;
    826         xcb_block_len += sizeof(uint32_t);
    827         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
    828         xcb_parts_idx++;
    829         xcb_align_to = ALIGNOF(uint32_t);
    830     }
    831     if(value_mask & XCB_SYNC_CA_DELTA) {
    832         /* xcb_sync_create_alarm_value_list_t.delta */
    833         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->delta;
    834         xcb_block_len += sizeof(xcb_sync_int64_t);
    835         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_sync_int64_t);
    836         xcb_parts_idx++;
    837         xcb_align_to = ALIGNOF(xcb_sync_int64_t);
    838     }
    839     if(value_mask & XCB_SYNC_CA_EVENTS) {
    840         /* xcb_sync_create_alarm_value_list_t.events */
    841         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->events;
    842         xcb_block_len += sizeof(uint32_t);
    843         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
    844         xcb_parts_idx++;
    845         xcb_align_to = ALIGNOF(uint32_t);
    846     }
    847     /* insert padding */
    848     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    849     xcb_buffer_len += xcb_block_len + xcb_pad;
    850     if (0 != xcb_pad) {
    851         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
    852         xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
    853         xcb_parts_idx++;
    854         xcb_pad = 0;
    855     }
    856     xcb_block_len = 0;
    857     xcb_padding_offset = 0;
    858 
    859     if (NULL == xcb_out) {
    860         /* allocate memory */
    861         xcb_out = malloc(xcb_buffer_len);
    862         *_buffer = xcb_out;
    863     }
    864 
    865     xcb_tmp = xcb_out;
    866     for(i=0; i<xcb_parts_idx; i++) {
    867         if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
    868             memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
    869         if (0 != xcb_parts[i].iov_len)
    870             xcb_tmp += xcb_parts[i].iov_len;
    871     }
    872 
    873     return xcb_buffer_len;
    874 }
    875 
    876 int
    877 xcb_sync_create_alarm_value_list_unpack (const void                          *_buffer,
    878                                          uint32_t                             value_mask,
    879                                          xcb_sync_create_alarm_value_list_t  *_aux)
    880 {
    881     char *xcb_tmp = (char *)_buffer;
    882     unsigned int xcb_buffer_len = 0;
    883     unsigned int xcb_block_len = 0;
    884     unsigned int xcb_pad = 0;
    885     unsigned int xcb_align_to = 0;
    886     unsigned int xcb_padding_offset = 0;
    887 
    888 
    889     if(value_mask & XCB_SYNC_CA_COUNTER) {
    890         /* xcb_sync_create_alarm_value_list_t.counter */
    891         _aux->counter = *(xcb_sync_counter_t *)xcb_tmp;
    892         xcb_block_len += sizeof(xcb_sync_counter_t);
    893         xcb_tmp += sizeof(xcb_sync_counter_t);
    894         xcb_align_to = ALIGNOF(xcb_sync_counter_t);
    895     }
    896     if(value_mask & XCB_SYNC_CA_VALUE_TYPE) {
    897         /* xcb_sync_create_alarm_value_list_t.valueType */
    898         _aux->valueType = *(uint32_t *)xcb_tmp;
    899         xcb_block_len += sizeof(uint32_t);
    900         xcb_tmp += sizeof(uint32_t);
    901         xcb_align_to = ALIGNOF(uint32_t);
    902     }
    903     if(value_mask & XCB_SYNC_CA_VALUE) {
    904         /* xcb_sync_create_alarm_value_list_t.value */
    905         _aux->value = *(xcb_sync_int64_t *)xcb_tmp;
    906         xcb_block_len += sizeof(xcb_sync_int64_t);
    907         xcb_tmp += sizeof(xcb_sync_int64_t);
    908         xcb_align_to = ALIGNOF(xcb_sync_int64_t);
    909     }
    910     if(value_mask & XCB_SYNC_CA_TEST_TYPE) {
    911         /* xcb_sync_create_alarm_value_list_t.testType */
    912         _aux->testType = *(uint32_t *)xcb_tmp;
    913         xcb_block_len += sizeof(uint32_t);
    914         xcb_tmp += sizeof(uint32_t);
    915         xcb_align_to = ALIGNOF(uint32_t);
    916     }
    917     if(value_mask & XCB_SYNC_CA_DELTA) {
    918         /* xcb_sync_create_alarm_value_list_t.delta */
    919         _aux->delta = *(xcb_sync_int64_t *)xcb_tmp;
    920         xcb_block_len += sizeof(xcb_sync_int64_t);
    921         xcb_tmp += sizeof(xcb_sync_int64_t);
    922         xcb_align_to = ALIGNOF(xcb_sync_int64_t);
    923     }
    924     if(value_mask & XCB_SYNC_CA_EVENTS) {
    925         /* xcb_sync_create_alarm_value_list_t.events */
    926         _aux->events = *(uint32_t *)xcb_tmp;
    927         xcb_block_len += sizeof(uint32_t);
    928         xcb_tmp += sizeof(uint32_t);
    929         xcb_align_to = ALIGNOF(uint32_t);
    930     }
    931     /* insert padding */
    932     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    933     xcb_buffer_len += xcb_block_len + xcb_pad;
    934     if (0 != xcb_pad) {
    935         xcb_tmp += xcb_pad;
    936         xcb_pad = 0;
    937     }
    938     xcb_block_len = 0;
    939     xcb_padding_offset = 0;
    940 
    941     return xcb_buffer_len;
    942 }
    943 
    944 int
    945 xcb_sync_create_alarm_value_list_sizeof (const void  *_buffer,
    946                                          uint32_t     value_mask)
    947 {
    948     xcb_sync_create_alarm_value_list_t _aux;
    949     return xcb_sync_create_alarm_value_list_unpack(_buffer, value_mask, &_aux);
    950 }
    951 
    952 int
    953 xcb_sync_create_alarm_sizeof (const void  *_buffer)
    954 {
    955     char *xcb_tmp = (char *)_buffer;
    956     const xcb_sync_create_alarm_request_t *_aux = (xcb_sync_create_alarm_request_t *)_buffer;
    957     unsigned int xcb_buffer_len = 0;
    958     unsigned int xcb_block_len = 0;
    959     unsigned int xcb_pad = 0;
    960     unsigned int xcb_align_to = 0;
    961 
    962 
    963     xcb_block_len += sizeof(xcb_sync_create_alarm_request_t);
    964     xcb_tmp += xcb_block_len;
    965     xcb_buffer_len += xcb_block_len;
    966     xcb_block_len = 0;
    967     /* value_list */
    968     xcb_block_len += xcb_sync_create_alarm_value_list_sizeof(xcb_tmp, _aux->value_mask);
    969     xcb_tmp += xcb_block_len;
    970     xcb_align_to = ALIGNOF(char);
    971     /* insert padding */
    972     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    973     xcb_buffer_len += xcb_block_len + xcb_pad;
    974     if (0 != xcb_pad) {
    975         xcb_tmp += xcb_pad;
    976         xcb_pad = 0;
    977     }
    978     xcb_block_len = 0;
    979 
    980     return xcb_buffer_len;
    981 }
    982 
    983 xcb_void_cookie_t
    984 xcb_sync_create_alarm_checked (xcb_connection_t *c,
    985                                xcb_sync_alarm_t  id,
    986                                uint32_t          value_mask,
    987                                const void       *value_list)
    988 {
    989     static const xcb_protocol_request_t xcb_req = {
    990         .count = 3,
    991         .ext = &xcb_sync_id,
    992         .opcode = XCB_SYNC_CREATE_ALARM,
    993         .isvoid = 1
    994     };
    995 
    996     struct iovec xcb_parts[5];
    997     xcb_void_cookie_t xcb_ret;
    998     xcb_sync_create_alarm_request_t xcb_out;
    999 
   1000     xcb_out.id = id;
   1001     xcb_out.value_mask = value_mask;
   1002 
   1003     xcb_parts[2].iov_base = (char *) &xcb_out;
   1004     xcb_parts[2].iov_len = sizeof(xcb_out);
   1005     xcb_parts[3].iov_base = 0;
   1006     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1007     /* xcb_sync_create_alarm_value_list_t value_list */
   1008     xcb_parts[4].iov_base = (char *) value_list;
   1009     xcb_parts[4].iov_len =
   1010       xcb_sync_create_alarm_value_list_sizeof (value_list, value_mask);
   1011 
   1012     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
   1013     return xcb_ret;
   1014 }
   1015 
   1016 xcb_void_cookie_t
   1017 xcb_sync_create_alarm (xcb_connection_t *c,
   1018                        xcb_sync_alarm_t  id,
   1019                        uint32_t          value_mask,
   1020                        const void       *value_list)
   1021 {
   1022     static const xcb_protocol_request_t xcb_req = {
   1023         .count = 3,
   1024         .ext = &xcb_sync_id,
   1025         .opcode = XCB_SYNC_CREATE_ALARM,
   1026         .isvoid = 1
   1027     };
   1028 
   1029     struct iovec xcb_parts[5];
   1030     xcb_void_cookie_t xcb_ret;
   1031     xcb_sync_create_alarm_request_t xcb_out;
   1032 
   1033     xcb_out.id = id;
   1034     xcb_out.value_mask = value_mask;
   1035 
   1036     xcb_parts[2].iov_base = (char *) &xcb_out;
   1037     xcb_parts[2].iov_len = sizeof(xcb_out);
   1038     xcb_parts[3].iov_base = 0;
   1039     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1040     /* xcb_sync_create_alarm_value_list_t value_list */
   1041     xcb_parts[4].iov_base = (char *) value_list;
   1042     xcb_parts[4].iov_len =
   1043       xcb_sync_create_alarm_value_list_sizeof (value_list, value_mask);
   1044 
   1045     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
   1046     return xcb_ret;
   1047 }
   1048 
   1049 xcb_void_cookie_t
   1050 xcb_sync_create_alarm_aux_checked (xcb_connection_t                         *c,
   1051                                    xcb_sync_alarm_t                          id,
   1052                                    uint32_t                                  value_mask,
   1053                                    const xcb_sync_create_alarm_value_list_t *value_list)
   1054 {
   1055     static const xcb_protocol_request_t xcb_req = {
   1056         .count = 3,
   1057         .ext = &xcb_sync_id,
   1058         .opcode = XCB_SYNC_CREATE_ALARM,
   1059         .isvoid = 1
   1060     };
   1061 
   1062     struct iovec xcb_parts[5];
   1063     xcb_void_cookie_t xcb_ret;
   1064     xcb_sync_create_alarm_request_t xcb_out;
   1065     void *xcb_aux0 = 0;
   1066 
   1067     xcb_out.id = id;
   1068     xcb_out.value_mask = value_mask;
   1069 
   1070     xcb_parts[2].iov_base = (char *) &xcb_out;
   1071     xcb_parts[2].iov_len = sizeof(xcb_out);
   1072     xcb_parts[3].iov_base = 0;
   1073     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1074     /* xcb_sync_create_alarm_value_list_t value_list */
   1075     xcb_parts[4].iov_len =
   1076       xcb_sync_create_alarm_value_list_serialize (&xcb_aux0, value_mask, value_list);
   1077     xcb_parts[4].iov_base = xcb_aux0;
   1078 
   1079     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
   1080     free(xcb_aux0);
   1081     return xcb_ret;
   1082 }
   1083 
   1084 xcb_void_cookie_t
   1085 xcb_sync_create_alarm_aux (xcb_connection_t                         *c,
   1086                            xcb_sync_alarm_t                          id,
   1087                            uint32_t                                  value_mask,
   1088                            const xcb_sync_create_alarm_value_list_t *value_list)
   1089 {
   1090     static const xcb_protocol_request_t xcb_req = {
   1091         .count = 3,
   1092         .ext = &xcb_sync_id,
   1093         .opcode = XCB_SYNC_CREATE_ALARM,
   1094         .isvoid = 1
   1095     };
   1096 
   1097     struct iovec xcb_parts[5];
   1098     xcb_void_cookie_t xcb_ret;
   1099     xcb_sync_create_alarm_request_t xcb_out;
   1100     void *xcb_aux0 = 0;
   1101 
   1102     xcb_out.id = id;
   1103     xcb_out.value_mask = value_mask;
   1104 
   1105     xcb_parts[2].iov_base = (char *) &xcb_out;
   1106     xcb_parts[2].iov_len = sizeof(xcb_out);
   1107     xcb_parts[3].iov_base = 0;
   1108     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1109     /* xcb_sync_create_alarm_value_list_t value_list */
   1110     xcb_parts[4].iov_len =
   1111       xcb_sync_create_alarm_value_list_serialize (&xcb_aux0, value_mask, value_list);
   1112     xcb_parts[4].iov_base = xcb_aux0;
   1113 
   1114     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
   1115     free(xcb_aux0);
   1116     return xcb_ret;
   1117 }
   1118 
   1119 void *
   1120 xcb_sync_create_alarm_value_list (const xcb_sync_create_alarm_request_t *R)
   1121 {
   1122     return (void *) (R + 1);
   1123 }
   1124 
   1125 int
   1126 xcb_sync_change_alarm_value_list_serialize (void                                     **_buffer,
   1127                                             uint32_t                                   value_mask,
   1128                                             const xcb_sync_change_alarm_value_list_t  *_aux)
   1129 {
   1130     char *xcb_out = *_buffer;
   1131     unsigned int xcb_buffer_len = 0;
   1132     unsigned int xcb_align_to = 0;
   1133     unsigned int xcb_padding_offset = 0;
   1134 
   1135     unsigned int xcb_pad = 0;
   1136     char xcb_pad0[3] = {0, 0, 0};
   1137     struct iovec xcb_parts[7];
   1138     unsigned int xcb_parts_idx = 0;
   1139     unsigned int xcb_block_len = 0;
   1140     unsigned int i;
   1141     char *xcb_tmp;
   1142 
   1143     if(value_mask & XCB_SYNC_CA_COUNTER) {
   1144         /* xcb_sync_change_alarm_value_list_t.counter */
   1145         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->counter;
   1146         xcb_block_len += sizeof(xcb_sync_counter_t);
   1147         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_sync_counter_t);
   1148         xcb_parts_idx++;
   1149         xcb_align_to = ALIGNOF(xcb_sync_counter_t);
   1150     }
   1151     if(value_mask & XCB_SYNC_CA_VALUE_TYPE) {
   1152         /* xcb_sync_change_alarm_value_list_t.valueType */
   1153         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valueType;
   1154         xcb_block_len += sizeof(uint32_t);
   1155         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
   1156         xcb_parts_idx++;
   1157         xcb_align_to = ALIGNOF(uint32_t);
   1158     }
   1159     if(value_mask & XCB_SYNC_CA_VALUE) {
   1160         /* xcb_sync_change_alarm_value_list_t.value */
   1161         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->value;
   1162         xcb_block_len += sizeof(xcb_sync_int64_t);
   1163         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_sync_int64_t);
   1164         xcb_parts_idx++;
   1165         xcb_align_to = ALIGNOF(xcb_sync_int64_t);
   1166     }
   1167     if(value_mask & XCB_SYNC_CA_TEST_TYPE) {
   1168         /* xcb_sync_change_alarm_value_list_t.testType */
   1169         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->testType;
   1170         xcb_block_len += sizeof(uint32_t);
   1171         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
   1172         xcb_parts_idx++;
   1173         xcb_align_to = ALIGNOF(uint32_t);
   1174     }
   1175     if(value_mask & XCB_SYNC_CA_DELTA) {
   1176         /* xcb_sync_change_alarm_value_list_t.delta */
   1177         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->delta;
   1178         xcb_block_len += sizeof(xcb_sync_int64_t);
   1179         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_sync_int64_t);
   1180         xcb_parts_idx++;
   1181         xcb_align_to = ALIGNOF(xcb_sync_int64_t);
   1182     }
   1183     if(value_mask & XCB_SYNC_CA_EVENTS) {
   1184         /* xcb_sync_change_alarm_value_list_t.events */
   1185         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->events;
   1186         xcb_block_len += sizeof(uint32_t);
   1187         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
   1188         xcb_parts_idx++;
   1189         xcb_align_to = ALIGNOF(uint32_t);
   1190     }
   1191     /* insert padding */
   1192     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
   1193     xcb_buffer_len += xcb_block_len + xcb_pad;
   1194     if (0 != xcb_pad) {
   1195         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
   1196         xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
   1197         xcb_parts_idx++;
   1198         xcb_pad = 0;
   1199     }
   1200     xcb_block_len = 0;
   1201     xcb_padding_offset = 0;
   1202 
   1203     if (NULL == xcb_out) {
   1204         /* allocate memory */
   1205         xcb_out = malloc(xcb_buffer_len);
   1206         *_buffer = xcb_out;
   1207     }
   1208 
   1209     xcb_tmp = xcb_out;
   1210     for(i=0; i<xcb_parts_idx; i++) {
   1211         if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
   1212             memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
   1213         if (0 != xcb_parts[i].iov_len)
   1214             xcb_tmp += xcb_parts[i].iov_len;
   1215     }
   1216 
   1217     return xcb_buffer_len;
   1218 }
   1219 
   1220 int
   1221 xcb_sync_change_alarm_value_list_unpack (const void                          *_buffer,
   1222                                          uint32_t                             value_mask,
   1223                                          xcb_sync_change_alarm_value_list_t  *_aux)
   1224 {
   1225     char *xcb_tmp = (char *)_buffer;
   1226     unsigned int xcb_buffer_len = 0;
   1227     unsigned int xcb_block_len = 0;
   1228     unsigned int xcb_pad = 0;
   1229     unsigned int xcb_align_to = 0;
   1230     unsigned int xcb_padding_offset = 0;
   1231 
   1232 
   1233     if(value_mask & XCB_SYNC_CA_COUNTER) {
   1234         /* xcb_sync_change_alarm_value_list_t.counter */
   1235         _aux->counter = *(xcb_sync_counter_t *)xcb_tmp;
   1236         xcb_block_len += sizeof(xcb_sync_counter_t);
   1237         xcb_tmp += sizeof(xcb_sync_counter_t);
   1238         xcb_align_to = ALIGNOF(xcb_sync_counter_t);
   1239     }
   1240     if(value_mask & XCB_SYNC_CA_VALUE_TYPE) {
   1241         /* xcb_sync_change_alarm_value_list_t.valueType */
   1242         _aux->valueType = *(uint32_t *)xcb_tmp;
   1243         xcb_block_len += sizeof(uint32_t);
   1244         xcb_tmp += sizeof(uint32_t);
   1245         xcb_align_to = ALIGNOF(uint32_t);
   1246     }
   1247     if(value_mask & XCB_SYNC_CA_VALUE) {
   1248         /* xcb_sync_change_alarm_value_list_t.value */
   1249         _aux->value = *(xcb_sync_int64_t *)xcb_tmp;
   1250         xcb_block_len += sizeof(xcb_sync_int64_t);
   1251         xcb_tmp += sizeof(xcb_sync_int64_t);
   1252         xcb_align_to = ALIGNOF(xcb_sync_int64_t);
   1253     }
   1254     if(value_mask & XCB_SYNC_CA_TEST_TYPE) {
   1255         /* xcb_sync_change_alarm_value_list_t.testType */
   1256         _aux->testType = *(uint32_t *)xcb_tmp;
   1257         xcb_block_len += sizeof(uint32_t);
   1258         xcb_tmp += sizeof(uint32_t);
   1259         xcb_align_to = ALIGNOF(uint32_t);
   1260     }
   1261     if(value_mask & XCB_SYNC_CA_DELTA) {
   1262         /* xcb_sync_change_alarm_value_list_t.delta */
   1263         _aux->delta = *(xcb_sync_int64_t *)xcb_tmp;
   1264         xcb_block_len += sizeof(xcb_sync_int64_t);
   1265         xcb_tmp += sizeof(xcb_sync_int64_t);
   1266         xcb_align_to = ALIGNOF(xcb_sync_int64_t);
   1267     }
   1268     if(value_mask & XCB_SYNC_CA_EVENTS) {
   1269         /* xcb_sync_change_alarm_value_list_t.events */
   1270         _aux->events = *(uint32_t *)xcb_tmp;
   1271         xcb_block_len += sizeof(uint32_t);
   1272         xcb_tmp += sizeof(uint32_t);
   1273         xcb_align_to = ALIGNOF(uint32_t);
   1274     }
   1275     /* insert padding */
   1276     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
   1277     xcb_buffer_len += xcb_block_len + xcb_pad;
   1278     if (0 != xcb_pad) {
   1279         xcb_tmp += xcb_pad;
   1280         xcb_pad = 0;
   1281     }
   1282     xcb_block_len = 0;
   1283     xcb_padding_offset = 0;
   1284 
   1285     return xcb_buffer_len;
   1286 }
   1287 
   1288 int
   1289 xcb_sync_change_alarm_value_list_sizeof (const void  *_buffer,
   1290                                          uint32_t     value_mask)
   1291 {
   1292     xcb_sync_change_alarm_value_list_t _aux;
   1293     return xcb_sync_change_alarm_value_list_unpack(_buffer, value_mask, &_aux);
   1294 }
   1295 
   1296 int
   1297 xcb_sync_change_alarm_sizeof (const void  *_buffer)
   1298 {
   1299     char *xcb_tmp = (char *)_buffer;
   1300     const xcb_sync_change_alarm_request_t *_aux = (xcb_sync_change_alarm_request_t *)_buffer;
   1301     unsigned int xcb_buffer_len = 0;
   1302     unsigned int xcb_block_len = 0;
   1303     unsigned int xcb_pad = 0;
   1304     unsigned int xcb_align_to = 0;
   1305 
   1306 
   1307     xcb_block_len += sizeof(xcb_sync_change_alarm_request_t);
   1308     xcb_tmp += xcb_block_len;
   1309     xcb_buffer_len += xcb_block_len;
   1310     xcb_block_len = 0;
   1311     /* value_list */
   1312     xcb_block_len += xcb_sync_change_alarm_value_list_sizeof(xcb_tmp, _aux->value_mask);
   1313     xcb_tmp += xcb_block_len;
   1314     xcb_align_to = ALIGNOF(char);
   1315     /* insert padding */
   1316     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
   1317     xcb_buffer_len += xcb_block_len + xcb_pad;
   1318     if (0 != xcb_pad) {
   1319         xcb_tmp += xcb_pad;
   1320         xcb_pad = 0;
   1321     }
   1322     xcb_block_len = 0;
   1323 
   1324     return xcb_buffer_len;
   1325 }
   1326 
   1327 xcb_void_cookie_t
   1328 xcb_sync_change_alarm_checked (xcb_connection_t *c,
   1329                                xcb_sync_alarm_t  id,
   1330                                uint32_t          value_mask,
   1331                                const void       *value_list)
   1332 {
   1333     static const xcb_protocol_request_t xcb_req = {
   1334         .count = 3,
   1335         .ext = &xcb_sync_id,
   1336         .opcode = XCB_SYNC_CHANGE_ALARM,
   1337         .isvoid = 1
   1338     };
   1339 
   1340     struct iovec xcb_parts[5];
   1341     xcb_void_cookie_t xcb_ret;
   1342     xcb_sync_change_alarm_request_t xcb_out;
   1343 
   1344     xcb_out.id = id;
   1345     xcb_out.value_mask = value_mask;
   1346 
   1347     xcb_parts[2].iov_base = (char *) &xcb_out;
   1348     xcb_parts[2].iov_len = sizeof(xcb_out);
   1349     xcb_parts[3].iov_base = 0;
   1350     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1351     /* xcb_sync_change_alarm_value_list_t value_list */
   1352     xcb_parts[4].iov_base = (char *) value_list;
   1353     xcb_parts[4].iov_len =
   1354       xcb_sync_change_alarm_value_list_sizeof (value_list, value_mask);
   1355 
   1356     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
   1357     return xcb_ret;
   1358 }
   1359 
   1360 xcb_void_cookie_t
   1361 xcb_sync_change_alarm (xcb_connection_t *c,
   1362                        xcb_sync_alarm_t  id,
   1363                        uint32_t          value_mask,
   1364                        const void       *value_list)
   1365 {
   1366     static const xcb_protocol_request_t xcb_req = {
   1367         .count = 3,
   1368         .ext = &xcb_sync_id,
   1369         .opcode = XCB_SYNC_CHANGE_ALARM,
   1370         .isvoid = 1
   1371     };
   1372 
   1373     struct iovec xcb_parts[5];
   1374     xcb_void_cookie_t xcb_ret;
   1375     xcb_sync_change_alarm_request_t xcb_out;
   1376 
   1377     xcb_out.id = id;
   1378     xcb_out.value_mask = value_mask;
   1379 
   1380     xcb_parts[2].iov_base = (char *) &xcb_out;
   1381     xcb_parts[2].iov_len = sizeof(xcb_out);
   1382     xcb_parts[3].iov_base = 0;
   1383     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1384     /* xcb_sync_change_alarm_value_list_t value_list */
   1385     xcb_parts[4].iov_base = (char *) value_list;
   1386     xcb_parts[4].iov_len =
   1387       xcb_sync_change_alarm_value_list_sizeof (value_list, value_mask);
   1388 
   1389     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
   1390     return xcb_ret;
   1391 }
   1392 
   1393 xcb_void_cookie_t
   1394 xcb_sync_change_alarm_aux_checked (xcb_connection_t                         *c,
   1395                                    xcb_sync_alarm_t                          id,
   1396                                    uint32_t                                  value_mask,
   1397                                    const xcb_sync_change_alarm_value_list_t *value_list)
   1398 {
   1399     static const xcb_protocol_request_t xcb_req = {
   1400         .count = 3,
   1401         .ext = &xcb_sync_id,
   1402         .opcode = XCB_SYNC_CHANGE_ALARM,
   1403         .isvoid = 1
   1404     };
   1405 
   1406     struct iovec xcb_parts[5];
   1407     xcb_void_cookie_t xcb_ret;
   1408     xcb_sync_change_alarm_request_t xcb_out;
   1409     void *xcb_aux0 = 0;
   1410 
   1411     xcb_out.id = id;
   1412     xcb_out.value_mask = value_mask;
   1413 
   1414     xcb_parts[2].iov_base = (char *) &xcb_out;
   1415     xcb_parts[2].iov_len = sizeof(xcb_out);
   1416     xcb_parts[3].iov_base = 0;
   1417     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1418     /* xcb_sync_change_alarm_value_list_t value_list */
   1419     xcb_parts[4].iov_len =
   1420       xcb_sync_change_alarm_value_list_serialize (&xcb_aux0, value_mask, value_list);
   1421     xcb_parts[4].iov_base = xcb_aux0;
   1422 
   1423     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
   1424     free(xcb_aux0);
   1425     return xcb_ret;
   1426 }
   1427 
   1428 xcb_void_cookie_t
   1429 xcb_sync_change_alarm_aux (xcb_connection_t                         *c,
   1430                            xcb_sync_alarm_t                          id,
   1431                            uint32_t                                  value_mask,
   1432                            const xcb_sync_change_alarm_value_list_t *value_list)
   1433 {
   1434     static const xcb_protocol_request_t xcb_req = {
   1435         .count = 3,
   1436         .ext = &xcb_sync_id,
   1437         .opcode = XCB_SYNC_CHANGE_ALARM,
   1438         .isvoid = 1
   1439     };
   1440 
   1441     struct iovec xcb_parts[5];
   1442     xcb_void_cookie_t xcb_ret;
   1443     xcb_sync_change_alarm_request_t xcb_out;
   1444     void *xcb_aux0 = 0;
   1445 
   1446     xcb_out.id = id;
   1447     xcb_out.value_mask = value_mask;
   1448 
   1449     xcb_parts[2].iov_base = (char *) &xcb_out;
   1450     xcb_parts[2].iov_len = sizeof(xcb_out);
   1451     xcb_parts[3].iov_base = 0;
   1452     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1453     /* xcb_sync_change_alarm_value_list_t value_list */
   1454     xcb_parts[4].iov_len =
   1455       xcb_sync_change_alarm_value_list_serialize (&xcb_aux0, value_mask, value_list);
   1456     xcb_parts[4].iov_base = xcb_aux0;
   1457 
   1458     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
   1459     free(xcb_aux0);
   1460     return xcb_ret;
   1461 }
   1462 
   1463 void *
   1464 xcb_sync_change_alarm_value_list (const xcb_sync_change_alarm_request_t *R)
   1465 {
   1466     return (void *) (R + 1);
   1467 }
   1468 
   1469 xcb_void_cookie_t
   1470 xcb_sync_destroy_alarm_checked (xcb_connection_t *c,
   1471                                 xcb_sync_alarm_t  alarm)
   1472 {
   1473     static const xcb_protocol_request_t xcb_req = {
   1474         .count = 2,
   1475         .ext = &xcb_sync_id,
   1476         .opcode = XCB_SYNC_DESTROY_ALARM,
   1477         .isvoid = 1
   1478     };
   1479 
   1480     struct iovec xcb_parts[4];
   1481     xcb_void_cookie_t xcb_ret;
   1482     xcb_sync_destroy_alarm_request_t xcb_out;
   1483 
   1484     xcb_out.alarm = alarm;
   1485 
   1486     xcb_parts[2].iov_base = (char *) &xcb_out;
   1487     xcb_parts[2].iov_len = sizeof(xcb_out);
   1488     xcb_parts[3].iov_base = 0;
   1489     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1490 
   1491     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
   1492     return xcb_ret;
   1493 }
   1494 
   1495 xcb_void_cookie_t
   1496 xcb_sync_destroy_alarm (xcb_connection_t *c,
   1497                         xcb_sync_alarm_t  alarm)
   1498 {
   1499     static const xcb_protocol_request_t xcb_req = {
   1500         .count = 2,
   1501         .ext = &xcb_sync_id,
   1502         .opcode = XCB_SYNC_DESTROY_ALARM,
   1503         .isvoid = 1
   1504     };
   1505 
   1506     struct iovec xcb_parts[4];
   1507     xcb_void_cookie_t xcb_ret;
   1508     xcb_sync_destroy_alarm_request_t xcb_out;
   1509 
   1510     xcb_out.alarm = alarm;
   1511 
   1512     xcb_parts[2].iov_base = (char *) &xcb_out;
   1513     xcb_parts[2].iov_len = sizeof(xcb_out);
   1514     xcb_parts[3].iov_base = 0;
   1515     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1516 
   1517     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
   1518     return xcb_ret;
   1519 }
   1520 
   1521 xcb_sync_query_alarm_cookie_t
   1522 xcb_sync_query_alarm (xcb_connection_t *c,
   1523                       xcb_sync_alarm_t  alarm)
   1524 {
   1525     static const xcb_protocol_request_t xcb_req = {
   1526         .count = 2,
   1527         .ext = &xcb_sync_id,
   1528         .opcode = XCB_SYNC_QUERY_ALARM,
   1529         .isvoid = 0
   1530     };
   1531 
   1532     struct iovec xcb_parts[4];
   1533     xcb_sync_query_alarm_cookie_t xcb_ret;
   1534     xcb_sync_query_alarm_request_t xcb_out;
   1535 
   1536     xcb_out.alarm = alarm;
   1537 
   1538     xcb_parts[2].iov_base = (char *) &xcb_out;
   1539     xcb_parts[2].iov_len = sizeof(xcb_out);
   1540     xcb_parts[3].iov_base = 0;
   1541     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1542 
   1543     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
   1544     return xcb_ret;
   1545 }
   1546 
   1547 xcb_sync_query_alarm_cookie_t
   1548 xcb_sync_query_alarm_unchecked (xcb_connection_t *c,
   1549                                 xcb_sync_alarm_t  alarm)
   1550 {
   1551     static const xcb_protocol_request_t xcb_req = {
   1552         .count = 2,
   1553         .ext = &xcb_sync_id,
   1554         .opcode = XCB_SYNC_QUERY_ALARM,
   1555         .isvoid = 0
   1556     };
   1557 
   1558     struct iovec xcb_parts[4];
   1559     xcb_sync_query_alarm_cookie_t xcb_ret;
   1560     xcb_sync_query_alarm_request_t xcb_out;
   1561 
   1562     xcb_out.alarm = alarm;
   1563 
   1564     xcb_parts[2].iov_base = (char *) &xcb_out;
   1565     xcb_parts[2].iov_len = sizeof(xcb_out);
   1566     xcb_parts[3].iov_base = 0;
   1567     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1568 
   1569     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
   1570     return xcb_ret;
   1571 }
   1572 
   1573 xcb_sync_query_alarm_reply_t *
   1574 xcb_sync_query_alarm_reply (xcb_connection_t               *c,
   1575                             xcb_sync_query_alarm_cookie_t   cookie  /**< */,
   1576                             xcb_generic_error_t           **e)
   1577 {
   1578     return (xcb_sync_query_alarm_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
   1579 }
   1580 
   1581 xcb_void_cookie_t
   1582 xcb_sync_set_priority_checked (xcb_connection_t *c,
   1583                                uint32_t          id,
   1584                                int32_t           priority)
   1585 {
   1586     static const xcb_protocol_request_t xcb_req = {
   1587         .count = 2,
   1588         .ext = &xcb_sync_id,
   1589         .opcode = XCB_SYNC_SET_PRIORITY,
   1590         .isvoid = 1
   1591     };
   1592 
   1593     struct iovec xcb_parts[4];
   1594     xcb_void_cookie_t xcb_ret;
   1595     xcb_sync_set_priority_request_t xcb_out;
   1596 
   1597     xcb_out.id = id;
   1598     xcb_out.priority = priority;
   1599 
   1600     xcb_parts[2].iov_base = (char *) &xcb_out;
   1601     xcb_parts[2].iov_len = sizeof(xcb_out);
   1602     xcb_parts[3].iov_base = 0;
   1603     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1604 
   1605     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
   1606     return xcb_ret;
   1607 }
   1608 
   1609 xcb_void_cookie_t
   1610 xcb_sync_set_priority (xcb_connection_t *c,
   1611                        uint32_t          id,
   1612                        int32_t           priority)
   1613 {
   1614     static const xcb_protocol_request_t xcb_req = {
   1615         .count = 2,
   1616         .ext = &xcb_sync_id,
   1617         .opcode = XCB_SYNC_SET_PRIORITY,
   1618         .isvoid = 1
   1619     };
   1620 
   1621     struct iovec xcb_parts[4];
   1622     xcb_void_cookie_t xcb_ret;
   1623     xcb_sync_set_priority_request_t xcb_out;
   1624 
   1625     xcb_out.id = id;
   1626     xcb_out.priority = priority;
   1627 
   1628     xcb_parts[2].iov_base = (char *) &xcb_out;
   1629     xcb_parts[2].iov_len = sizeof(xcb_out);
   1630     xcb_parts[3].iov_base = 0;
   1631     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1632 
   1633     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
   1634     return xcb_ret;
   1635 }
   1636 
   1637 xcb_sync_get_priority_cookie_t
   1638 xcb_sync_get_priority (xcb_connection_t *c,
   1639                        uint32_t          id)
   1640 {
   1641     static const xcb_protocol_request_t xcb_req = {
   1642         .count = 2,
   1643         .ext = &xcb_sync_id,
   1644         .opcode = XCB_SYNC_GET_PRIORITY,
   1645         .isvoid = 0
   1646     };
   1647 
   1648     struct iovec xcb_parts[4];
   1649     xcb_sync_get_priority_cookie_t xcb_ret;
   1650     xcb_sync_get_priority_request_t xcb_out;
   1651 
   1652     xcb_out.id = id;
   1653 
   1654     xcb_parts[2].iov_base = (char *) &xcb_out;
   1655     xcb_parts[2].iov_len = sizeof(xcb_out);
   1656     xcb_parts[3].iov_base = 0;
   1657     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1658 
   1659     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
   1660     return xcb_ret;
   1661 }
   1662 
   1663 xcb_sync_get_priority_cookie_t
   1664 xcb_sync_get_priority_unchecked (xcb_connection_t *c,
   1665                                  uint32_t          id)
   1666 {
   1667     static const xcb_protocol_request_t xcb_req = {
   1668         .count = 2,
   1669         .ext = &xcb_sync_id,
   1670         .opcode = XCB_SYNC_GET_PRIORITY,
   1671         .isvoid = 0
   1672     };
   1673 
   1674     struct iovec xcb_parts[4];
   1675     xcb_sync_get_priority_cookie_t xcb_ret;
   1676     xcb_sync_get_priority_request_t xcb_out;
   1677 
   1678     xcb_out.id = id;
   1679 
   1680     xcb_parts[2].iov_base = (char *) &xcb_out;
   1681     xcb_parts[2].iov_len = sizeof(xcb_out);
   1682     xcb_parts[3].iov_base = 0;
   1683     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1684 
   1685     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
   1686     return xcb_ret;
   1687 }
   1688 
   1689 xcb_sync_get_priority_reply_t *
   1690 xcb_sync_get_priority_reply (xcb_connection_t                *c,
   1691                              xcb_sync_get_priority_cookie_t   cookie  /**< */,
   1692                              xcb_generic_error_t            **e)
   1693 {
   1694     return (xcb_sync_get_priority_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
   1695 }
   1696 
   1697 xcb_void_cookie_t
   1698 xcb_sync_create_fence_checked (xcb_connection_t *c,
   1699                                xcb_drawable_t    drawable,
   1700                                xcb_sync_fence_t  fence,
   1701                                uint8_t           initially_triggered)
   1702 {
   1703     static const xcb_protocol_request_t xcb_req = {
   1704         .count = 2,
   1705         .ext = &xcb_sync_id,
   1706         .opcode = XCB_SYNC_CREATE_FENCE,
   1707         .isvoid = 1
   1708     };
   1709 
   1710     struct iovec xcb_parts[4];
   1711     xcb_void_cookie_t xcb_ret;
   1712     xcb_sync_create_fence_request_t xcb_out;
   1713 
   1714     xcb_out.drawable = drawable;
   1715     xcb_out.fence = fence;
   1716     xcb_out.initially_triggered = initially_triggered;
   1717 
   1718     xcb_parts[2].iov_base = (char *) &xcb_out;
   1719     xcb_parts[2].iov_len = sizeof(xcb_out);
   1720     xcb_parts[3].iov_base = 0;
   1721     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1722 
   1723     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
   1724     return xcb_ret;
   1725 }
   1726 
   1727 xcb_void_cookie_t
   1728 xcb_sync_create_fence (xcb_connection_t *c,
   1729                        xcb_drawable_t    drawable,
   1730                        xcb_sync_fence_t  fence,
   1731                        uint8_t           initially_triggered)
   1732 {
   1733     static const xcb_protocol_request_t xcb_req = {
   1734         .count = 2,
   1735         .ext = &xcb_sync_id,
   1736         .opcode = XCB_SYNC_CREATE_FENCE,
   1737         .isvoid = 1
   1738     };
   1739 
   1740     struct iovec xcb_parts[4];
   1741     xcb_void_cookie_t xcb_ret;
   1742     xcb_sync_create_fence_request_t xcb_out;
   1743 
   1744     xcb_out.drawable = drawable;
   1745     xcb_out.fence = fence;
   1746     xcb_out.initially_triggered = initially_triggered;
   1747 
   1748     xcb_parts[2].iov_base = (char *) &xcb_out;
   1749     xcb_parts[2].iov_len = sizeof(xcb_out);
   1750     xcb_parts[3].iov_base = 0;
   1751     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1752 
   1753     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
   1754     return xcb_ret;
   1755 }
   1756 
   1757 xcb_void_cookie_t
   1758 xcb_sync_trigger_fence_checked (xcb_connection_t *c,
   1759                                 xcb_sync_fence_t  fence)
   1760 {
   1761     static const xcb_protocol_request_t xcb_req = {
   1762         .count = 2,
   1763         .ext = &xcb_sync_id,
   1764         .opcode = XCB_SYNC_TRIGGER_FENCE,
   1765         .isvoid = 1
   1766     };
   1767 
   1768     struct iovec xcb_parts[4];
   1769     xcb_void_cookie_t xcb_ret;
   1770     xcb_sync_trigger_fence_request_t xcb_out;
   1771 
   1772     xcb_out.fence = fence;
   1773 
   1774     xcb_parts[2].iov_base = (char *) &xcb_out;
   1775     xcb_parts[2].iov_len = sizeof(xcb_out);
   1776     xcb_parts[3].iov_base = 0;
   1777     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1778 
   1779     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
   1780     return xcb_ret;
   1781 }
   1782 
   1783 xcb_void_cookie_t
   1784 xcb_sync_trigger_fence (xcb_connection_t *c,
   1785                         xcb_sync_fence_t  fence)
   1786 {
   1787     static const xcb_protocol_request_t xcb_req = {
   1788         .count = 2,
   1789         .ext = &xcb_sync_id,
   1790         .opcode = XCB_SYNC_TRIGGER_FENCE,
   1791         .isvoid = 1
   1792     };
   1793 
   1794     struct iovec xcb_parts[4];
   1795     xcb_void_cookie_t xcb_ret;
   1796     xcb_sync_trigger_fence_request_t xcb_out;
   1797 
   1798     xcb_out.fence = fence;
   1799 
   1800     xcb_parts[2].iov_base = (char *) &xcb_out;
   1801     xcb_parts[2].iov_len = sizeof(xcb_out);
   1802     xcb_parts[3].iov_base = 0;
   1803     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1804 
   1805     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
   1806     return xcb_ret;
   1807 }
   1808 
   1809 xcb_void_cookie_t
   1810 xcb_sync_reset_fence_checked (xcb_connection_t *c,
   1811                               xcb_sync_fence_t  fence)
   1812 {
   1813     static const xcb_protocol_request_t xcb_req = {
   1814         .count = 2,
   1815         .ext = &xcb_sync_id,
   1816         .opcode = XCB_SYNC_RESET_FENCE,
   1817         .isvoid = 1
   1818     };
   1819 
   1820     struct iovec xcb_parts[4];
   1821     xcb_void_cookie_t xcb_ret;
   1822     xcb_sync_reset_fence_request_t xcb_out;
   1823 
   1824     xcb_out.fence = fence;
   1825 
   1826     xcb_parts[2].iov_base = (char *) &xcb_out;
   1827     xcb_parts[2].iov_len = sizeof(xcb_out);
   1828     xcb_parts[3].iov_base = 0;
   1829     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1830 
   1831     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
   1832     return xcb_ret;
   1833 }
   1834 
   1835 xcb_void_cookie_t
   1836 xcb_sync_reset_fence (xcb_connection_t *c,
   1837                       xcb_sync_fence_t  fence)
   1838 {
   1839     static const xcb_protocol_request_t xcb_req = {
   1840         .count = 2,
   1841         .ext = &xcb_sync_id,
   1842         .opcode = XCB_SYNC_RESET_FENCE,
   1843         .isvoid = 1
   1844     };
   1845 
   1846     struct iovec xcb_parts[4];
   1847     xcb_void_cookie_t xcb_ret;
   1848     xcb_sync_reset_fence_request_t xcb_out;
   1849 
   1850     xcb_out.fence = fence;
   1851 
   1852     xcb_parts[2].iov_base = (char *) &xcb_out;
   1853     xcb_parts[2].iov_len = sizeof(xcb_out);
   1854     xcb_parts[3].iov_base = 0;
   1855     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1856 
   1857     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
   1858     return xcb_ret;
   1859 }
   1860 
   1861 xcb_void_cookie_t
   1862 xcb_sync_destroy_fence_checked (xcb_connection_t *c,
   1863                                 xcb_sync_fence_t  fence)
   1864 {
   1865     static const xcb_protocol_request_t xcb_req = {
   1866         .count = 2,
   1867         .ext = &xcb_sync_id,
   1868         .opcode = XCB_SYNC_DESTROY_FENCE,
   1869         .isvoid = 1
   1870     };
   1871 
   1872     struct iovec xcb_parts[4];
   1873     xcb_void_cookie_t xcb_ret;
   1874     xcb_sync_destroy_fence_request_t xcb_out;
   1875 
   1876     xcb_out.fence = fence;
   1877 
   1878     xcb_parts[2].iov_base = (char *) &xcb_out;
   1879     xcb_parts[2].iov_len = sizeof(xcb_out);
   1880     xcb_parts[3].iov_base = 0;
   1881     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1882 
   1883     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
   1884     return xcb_ret;
   1885 }
   1886 
   1887 xcb_void_cookie_t
   1888 xcb_sync_destroy_fence (xcb_connection_t *c,
   1889                         xcb_sync_fence_t  fence)
   1890 {
   1891     static const xcb_protocol_request_t xcb_req = {
   1892         .count = 2,
   1893         .ext = &xcb_sync_id,
   1894         .opcode = XCB_SYNC_DESTROY_FENCE,
   1895         .isvoid = 1
   1896     };
   1897 
   1898     struct iovec xcb_parts[4];
   1899     xcb_void_cookie_t xcb_ret;
   1900     xcb_sync_destroy_fence_request_t xcb_out;
   1901 
   1902     xcb_out.fence = fence;
   1903 
   1904     xcb_parts[2].iov_base = (char *) &xcb_out;
   1905     xcb_parts[2].iov_len = sizeof(xcb_out);
   1906     xcb_parts[3].iov_base = 0;
   1907     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1908 
   1909     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
   1910     return xcb_ret;
   1911 }
   1912 
   1913 xcb_sync_query_fence_cookie_t
   1914 xcb_sync_query_fence (xcb_connection_t *c,
   1915                       xcb_sync_fence_t  fence)
   1916 {
   1917     static const xcb_protocol_request_t xcb_req = {
   1918         .count = 2,
   1919         .ext = &xcb_sync_id,
   1920         .opcode = XCB_SYNC_QUERY_FENCE,
   1921         .isvoid = 0
   1922     };
   1923 
   1924     struct iovec xcb_parts[4];
   1925     xcb_sync_query_fence_cookie_t xcb_ret;
   1926     xcb_sync_query_fence_request_t xcb_out;
   1927 
   1928     xcb_out.fence = fence;
   1929 
   1930     xcb_parts[2].iov_base = (char *) &xcb_out;
   1931     xcb_parts[2].iov_len = sizeof(xcb_out);
   1932     xcb_parts[3].iov_base = 0;
   1933     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1934 
   1935     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
   1936     return xcb_ret;
   1937 }
   1938 
   1939 xcb_sync_query_fence_cookie_t
   1940 xcb_sync_query_fence_unchecked (xcb_connection_t *c,
   1941                                 xcb_sync_fence_t  fence)
   1942 {
   1943     static const xcb_protocol_request_t xcb_req = {
   1944         .count = 2,
   1945         .ext = &xcb_sync_id,
   1946         .opcode = XCB_SYNC_QUERY_FENCE,
   1947         .isvoid = 0
   1948     };
   1949 
   1950     struct iovec xcb_parts[4];
   1951     xcb_sync_query_fence_cookie_t xcb_ret;
   1952     xcb_sync_query_fence_request_t xcb_out;
   1953 
   1954     xcb_out.fence = fence;
   1955 
   1956     xcb_parts[2].iov_base = (char *) &xcb_out;
   1957     xcb_parts[2].iov_len = sizeof(xcb_out);
   1958     xcb_parts[3].iov_base = 0;
   1959     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   1960 
   1961     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
   1962     return xcb_ret;
   1963 }
   1964 
   1965 xcb_sync_query_fence_reply_t *
   1966 xcb_sync_query_fence_reply (xcb_connection_t               *c,
   1967                             xcb_sync_query_fence_cookie_t   cookie  /**< */,
   1968                             xcb_generic_error_t           **e)
   1969 {
   1970     return (xcb_sync_query_fence_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
   1971 }
   1972 
   1973 int
   1974 xcb_sync_await_fence_sizeof (const void  *_buffer,
   1975                              uint32_t     fence_list_len)
   1976 {
   1977     char *xcb_tmp = (char *)_buffer;
   1978     unsigned int xcb_buffer_len = 0;
   1979     unsigned int xcb_block_len = 0;
   1980     unsigned int xcb_pad = 0;
   1981     unsigned int xcb_align_to = 0;
   1982 
   1983 
   1984     xcb_block_len += sizeof(xcb_sync_await_fence_request_t);
   1985     xcb_tmp += xcb_block_len;
   1986     xcb_buffer_len += xcb_block_len;
   1987     xcb_block_len = 0;
   1988     /* fence_list */
   1989     xcb_block_len += fence_list_len * sizeof(xcb_sync_fence_t);
   1990     xcb_tmp += xcb_block_len;
   1991     xcb_align_to = ALIGNOF(xcb_sync_fence_t);
   1992     /* insert padding */
   1993     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
   1994     xcb_buffer_len += xcb_block_len + xcb_pad;
   1995     if (0 != xcb_pad) {
   1996         xcb_tmp += xcb_pad;
   1997         xcb_pad = 0;
   1998     }
   1999     xcb_block_len = 0;
   2000 
   2001     return xcb_buffer_len;
   2002 }
   2003 
   2004 xcb_void_cookie_t
   2005 xcb_sync_await_fence_checked (xcb_connection_t       *c,
   2006                               uint32_t                fence_list_len,
   2007                               const xcb_sync_fence_t *fence_list)
   2008 {
   2009     static const xcb_protocol_request_t xcb_req = {
   2010         .count = 4,
   2011         .ext = &xcb_sync_id,
   2012         .opcode = XCB_SYNC_AWAIT_FENCE,
   2013         .isvoid = 1
   2014     };
   2015 
   2016     struct iovec xcb_parts[6];
   2017     xcb_void_cookie_t xcb_ret;
   2018     xcb_sync_await_fence_request_t xcb_out;
   2019 
   2020 
   2021     xcb_parts[2].iov_base = (char *) &xcb_out;
   2022     xcb_parts[2].iov_len = sizeof(xcb_out);
   2023     xcb_parts[3].iov_base = 0;
   2024     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   2025     /* xcb_sync_fence_t fence_list */
   2026     xcb_parts[4].iov_base = (char *) fence_list;
   2027     xcb_parts[4].iov_len = fence_list_len * sizeof(xcb_sync_fence_t);
   2028     xcb_parts[5].iov_base = 0;
   2029     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
   2030 
   2031     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
   2032     return xcb_ret;
   2033 }
   2034 
   2035 xcb_void_cookie_t
   2036 xcb_sync_await_fence (xcb_connection_t       *c,
   2037                       uint32_t                fence_list_len,
   2038                       const xcb_sync_fence_t *fence_list)
   2039 {
   2040     static const xcb_protocol_request_t xcb_req = {
   2041         .count = 4,
   2042         .ext = &xcb_sync_id,
   2043         .opcode = XCB_SYNC_AWAIT_FENCE,
   2044         .isvoid = 1
   2045     };
   2046 
   2047     struct iovec xcb_parts[6];
   2048     xcb_void_cookie_t xcb_ret;
   2049     xcb_sync_await_fence_request_t xcb_out;
   2050 
   2051 
   2052     xcb_parts[2].iov_base = (char *) &xcb_out;
   2053     xcb_parts[2].iov_len = sizeof(xcb_out);
   2054     xcb_parts[3].iov_base = 0;
   2055     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
   2056     /* xcb_sync_fence_t fence_list */
   2057     xcb_parts[4].iov_base = (char *) fence_list;
   2058     xcb_parts[4].iov_len = fence_list_len * sizeof(xcb_sync_fence_t);
   2059     xcb_parts[5].iov_base = 0;
   2060     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
   2061 
   2062     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
   2063     return xcb_ret;
   2064 }
   2065 
   2066 xcb_sync_fence_t *
   2067 xcb_sync_await_fence_fence_list (const xcb_sync_await_fence_request_t *R)
   2068 {
   2069     return (xcb_sync_fence_t *) (R + 1);
   2070 }
   2071 
   2072 int
   2073 xcb_sync_await_fence_fence_list_length (const xcb_sync_await_fence_request_t *R)
   2074 {
   2075     return (((R->length * 4) - sizeof(xcb_sync_await_fence_request_t))/sizeof(xcb_sync_fence_t));
   2076 }
   2077 
   2078 xcb_generic_iterator_t
   2079 xcb_sync_await_fence_fence_list_end (const xcb_sync_await_fence_request_t *R)
   2080 {
   2081     xcb_generic_iterator_t i;
   2082     i.data = ((xcb_sync_fence_t *) (R + 1)) + ((((R->length * 4) - sizeof(xcb_sync_await_fence_request_t))/sizeof(xcb_sync_fence_t)));
   2083     i.rem = 0;
   2084     i.index = (char *) i.data - (char *) R;
   2085     return i;
   2086 }
   2087 
   2088