summaryrefslogtreecommitdiff
path: root/build-aux/mbim-codegen
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2013-06-23 20:12:56 +0200
committerAleksander Morgado <aleksander@lanedo.com>2013-06-24 19:22:32 +0200
commit491435b0ca78bf75ec726891c3ae6303dc265584 (patch)
treeeaf6a3f04ff15cda307caaaf64c1c259cf4bd6d5 /build-aux/mbim-codegen
parent580c0f25d86268768869c84634403210c9c08824 (diff)
downloadlibmbim-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.py6
-rw-r--r--build-aux/mbim-codegen/Struct.py55
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':