diff options
author | Povilas Kanapickas <povilas@radix.lt> | 2021-07-30 22:58:47 +0300 |
---|---|---|
committer | Povilas Kanapickas <povilas@radix.lt> | 2021-07-30 22:58:47 +0300 |
commit | 3c76c0579ffa521af41f78ee937b1337581da985 (patch) | |
tree | ed6eee237e7f664d8d7c79082f93bacfeaff776e | |
parent | bdc3f21a5205293852bbaa173f43389cbf66f52b (diff) |
c_client.py: Implement handling of <length> element
Signed-off-by: Povilas Kanapickas <povilas@radix.lt>
-rw-r--r-- | src/c_client.py | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/c_client.py b/src/c_client.py index 6b7e32c..dfb5864 100644 --- a/src/c_client.py +++ b/src/c_client.py @@ -1417,6 +1417,16 @@ def _c_serialize(context, self): elif 'sizeof' == context: param_names = [p[2] for p in params] + if self.length_expr is not None: + _c(' const %s *_aux = (%s *)_buffer;', self.c_type, self.c_type) + prefix = [('_aux', '->', self)] + + field_mapping = _c_get_field_mapping_for_expr(self, self.length_expr, prefix) + + _c(' return %s;', _c_accessor_get_expr(self.length_expr, field_mapping)) + _c('}') + _c_pre.redirect_end() + return if self.is_switch: # switch: call _unpack() _c(' %s _aux;', self.c_type) |