diff options
author | Aleksander Morgado <aleksander@lanedo.com> | 2013-06-23 20:12:56 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@lanedo.com> | 2013-06-24 19:22:32 +0200 |
commit | 491435b0ca78bf75ec726891c3ae6303dc265584 (patch) | |
tree | eaf6a3f04ff15cda307caaaf64c1c259cf4bd6d5 /build-aux/mbim-codegen | |
parent | 580c0f25d86268768869c84634403210c9c08824 (diff) | |
download | libmbim-491435b0ca78bf75ec726891c3ae6303dc265584.tar.gz |
mbim-codegen: handle reading/writing byte-arrays with shared length field
Diffstat (limited to 'build-aux/mbim-codegen')
-rw-r--r-- | build-aux/mbim-codegen/Message.py | 6 | ||||
-rw-r--r-- | build-aux/mbim-codegen/Struct.py | 55 |
2 files changed, 41 insertions, 20 deletions
diff --git a/build-aux/mbim-codegen/Message.py b/build-aux/mbim-codegen/Message.py index fc5da03..cbeb239 100644 --- a/build-aux/mbim-codegen/Message.py +++ b/build-aux/mbim-codegen/Message.py @@ -722,7 +722,7 @@ class Message: inner_template += ( ' const guint8 *tmp;\n' '\n' - ' tmp = _mbim_message_read_byte_array (message, 0, offset, FALSE, NULL);\n' + ' tmp = _mbim_message_read_byte_array (message, 0, offset, FALSE, FALSE, NULL);\n' ' if (${field} != NULL)\n' ' *${field} = tmp;\n' ' offset += ${array_size};\n') @@ -731,7 +731,7 @@ class Message: ' const guint8 *tmp;\n' ' guint32 tmpsize;\n' '\n' - ' tmp = _mbim_message_read_byte_array (message, 0, offset, FALSE, &tmpsize);\n' + ' tmp = _mbim_message_read_byte_array (message, 0, offset, FALSE, FALSE, &tmpsize);\n' ' if (${field} != NULL)\n' ' *${field} = tmp;\n' ' if (${field}_size != NULL)\n' @@ -742,7 +742,7 @@ class Message: ' const guint8 *tmp;\n' ' guint32 tmpsize;\n' '\n' - ' tmp = _mbim_message_read_byte_array (message, 0, offset, TRUE, &tmpsize);\n' + ' tmp = _mbim_message_read_byte_array (message, 0, offset, TRUE, TRUE, &tmpsize);\n' ' if (${field} != NULL)\n' ' *${field} = tmp;\n' ' if (${field}_size != NULL)\n' diff --git a/build-aux/mbim-codegen/Struct.py b/build-aux/mbim-codegen/Struct.py index 5983cc1..afe2ba5 100644 --- a/build-aux/mbim-codegen/Struct.py +++ b/build-aux/mbim-codegen/Struct.py @@ -74,8 +74,10 @@ class Struct: elif field['format'] =='byte-array': inner_template = (' * @${field_name_underscore}: an array of #guint8 values.\n') elif field['format'] =='unsized-byte-array' or field['format'] == 'ref-byte-array': - inner_template = (' * @${field_name_underscore}_size: size of the ${field_name_underscore} array.\n' - ' * @${field_name_underscore}: an array of #guint8 values.\n') + inner_template = '' + if 'array-size-field' not in field: + inner_template += (' * @${field_name_underscore}_size: size of the ${field_name_underscore} array.\n') + inner_template += (' * @${field_name_underscore}: an array of #guint8 values.\n') elif field['format'] == 'guint32': inner_template = ( ' * @${field_name_underscore}: a #guint32.\n') @@ -126,8 +128,11 @@ class Struct: inner_template = ( ' guint8 ${field_name_underscore}[${array_size}];\n') elif field['format'] == 'unsized-byte-array' or field['format'] == 'ref-byte-array': - inner_template = ( - ' guint32 ${field_name_underscore}_size;\n' + inner_template = '' + if 'array-size-field' not in field: + inner_template += ( + ' guint32 ${field_name_underscore}_size;\n') + inner_template += ( ' guint8 *${field_name_underscore};\n') elif field['format'] == 'guint32': inner_template = ( @@ -316,23 +321,36 @@ class Struct: ' memcpy (&(out->${field_name_underscore}), _mbim_message_read_uuid (self, offset), 16);\n' ' offset += 16;\n') elif field['format'] == 'ref-byte-array': - inner_template += ( - '\n' - ' {\n' - ' const guint8 *tmp;\n' - '\n' - ' tmp = _mbim_message_read_byte_array (self, relative_offset, offset, TRUE, &(out->${field_name_underscore}_size));\n' - ' out->${field_name_underscore} = g_malloc (out->${field_name_underscore}_size);\n' - ' memcpy (out->${field_name_underscore}, tmp, out->${field_name_underscore}_size);\n' - ' offset += 8;\n' - ' }\n') + if 'array-size-field' in field: + translations['array_size_field_name_underscore'] = utils.build_underscore_name_from_camelcase(field['array-size-field']) + inner_template += ( + '\n' + ' {\n' + ' const guint8 *tmp;\n' + '\n' + ' tmp = _mbim_message_read_byte_array (self, relative_offset, offset, TRUE, FALSE, NULL);\n' + ' out->${field_name_underscore} = g_malloc (out->${array_size_field_name_underscore});\n' + ' memcpy (out->${field_name_underscore}, tmp, out->${array_size_field_name_underscore});\n' + ' offset += 4;\n' + ' }\n') + else: + inner_template += ( + '\n' + ' {\n' + ' const guint8 *tmp;\n' + '\n' + ' tmp = _mbim_message_read_byte_array (self, relative_offset, offset, TRUE, TRUE, &(out->${field_name_underscore}_size));\n' + ' out->${field_name_underscore} = g_malloc (out->${field_name_underscore}_size);\n' + ' memcpy (out->${field_name_underscore}, tmp, out->${field_name_underscore}_size);\n' + ' offset += 8;\n' + ' }\n') elif field['format'] == 'unsized-byte-array': inner_template += ( '\n' ' {\n' ' const guint8 *tmp;\n' '\n' - ' tmp = _mbim_message_read_byte_array (self, relative_offset, offset, FALSE, &(out->${field_name_underscore}_size));\n' + ' tmp = _mbim_message_read_byte_array (self, relative_offset, offset, FALSE, FALSE, &(out->${field_name_underscore}_size));\n' ' out->${field_name_underscore} = g_malloc (out->${field_name_underscore}_size);\n' ' memcpy (out->${field_name_underscore}, tmp, out->${field_name_underscore}_size);\n' ' /* no offset update expected, this should be the last field */\n' @@ -344,7 +362,7 @@ class Struct: ' {\n' ' const guint8 *tmp;\n' '\n' - ' tmp = _mbim_message_read_byte_array (self, relative_offset, offset, FALSE, NULL));\n' + ' tmp = _mbim_message_read_byte_array (self, relative_offset, offset, FALSE, FALSE, NULL));\n' ' memcpy (out->${field_name_underscore}, tmp, ${array_size});\n' ' offset += ${array_size};\n' ' }\n') @@ -484,7 +502,10 @@ class Struct: elif field['format'] == 'unsized-byte-array': inner_template = (' _mbim_struct_builder_append_byte_array (builder, FALSE, FALSE, value->${field}, value->${field}_size);\n') elif field['format'] == 'ref-byte-array': - inner_template = (' _mbim_struct_builder_append_byte_array (builder, TRUE, TRUE, value->${field}, value->${field}_size);\n') + if 'array-size-field' in field: + inner_template = (' _mbim_struct_builder_append_byte_array (builder, TRUE, FALSE, value->${field}, value->${array_size_field});\n') + else: + inner_template = (' _mbim_struct_builder_append_byte_array (builder, TRUE, TRUE, value->${field}, value->${field}_size);\n') elif field['format'] == 'guint32': inner_template = (' _mbim_struct_builder_append_guint32 (builder, value->${field});\n') elif field['format'] == 'guint32-array': |