c_client: Don't serialise non-wire fields
For when we have a variable-sized field followed by a fixed field, make sure we do not serialise non-wire fields. Signed-off-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
parent
d10194a321
commit
c7aa4e682f
|
@ -458,7 +458,7 @@ def _c_type_setup(self, name, postfix):
|
|||
field.c_field_const_type = 'const ' + field.c_field_type
|
||||
self.c_need_aux = True
|
||||
|
||||
if not field.type.fixed_size() and not field.type.is_case_or_bitcase:
|
||||
if not field.type.fixed_size() and not field.type.is_case_or_bitcase and field.wire:
|
||||
self.c_need_sizeof = True
|
||||
|
||||
field.c_iterator_type = _t(field.field_type + ('iterator',)) # xcb_fieldtype_iterator_t
|
||||
|
@ -497,7 +497,7 @@ def _c_type_setup(self, name, postfix):
|
|||
_c_type_setup(field.type, field.field_type, ())
|
||||
if field.type.is_list:
|
||||
_c_type_setup(field.type.member, field.field_type, ())
|
||||
if (field.type.nmemb is None):
|
||||
if (field.type.nmemb is None and field.wire):
|
||||
self.c_need_sizeof = True
|
||||
|
||||
if self.c_need_serialize:
|
||||
|
@ -1170,6 +1170,8 @@ def _c_serialize_helper_fields(context, self,
|
|||
_c_pre.push_indent(space + ' ')
|
||||
|
||||
for field in self.fields:
|
||||
if not field.wire:
|
||||
continue
|
||||
if not field.visible:
|
||||
if not ((field.wire and not field.auto) or 'unserialize' == context):
|
||||
continue
|
||||
|
@ -1194,7 +1196,9 @@ def _c_serialize_helper_fields(context, self,
|
|||
|
||||
# fields with variable size
|
||||
else:
|
||||
if field.type.is_pad:
|
||||
if not field.wire:
|
||||
continue
|
||||
elif field.type.is_pad:
|
||||
# Variable length pad is <pad align= />
|
||||
code_lines.append('%s xcb_align_to = %d;' % (space, field.type.align))
|
||||
count += _c_serialize_helper_insert_padding(context, self, code_lines, space,
|
||||
|
@ -2308,7 +2312,7 @@ def _c_request_helper(self, name, void, regular, aux=False, reply_fds=False):
|
|||
count = 2
|
||||
if not self.c_var_followed_by_fixed_fields:
|
||||
for field in param_fields:
|
||||
if not field.type.fixed_size():
|
||||
if not field.type.fixed_size() and field.wire:
|
||||
count = count + 2
|
||||
if field.type.c_need_serialize:
|
||||
# _serialize() keeps track of padding automatically
|
||||
|
@ -2379,7 +2383,7 @@ def _c_request_helper(self, name, void, regular, aux=False, reply_fds=False):
|
|||
count = 4
|
||||
|
||||
for field in param_fields:
|
||||
if not field.type.fixed_size():
|
||||
if field.wire and not field.type.fixed_size():
|
||||
_c(' /* %s %s */', field.type.c_type, field.c_field_name)
|
||||
# default: simple cast to char *
|
||||
if not field.type.c_need_serialize and not field.type.c_need_sizeof:
|
||||
|
|
Loading…
Reference in New Issue