summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@aleksander.es>2019-11-26 13:13:04 +0100
committerAleksander Morgado <aleksander@aleksander.es>2019-11-26 14:55:01 +0100
commit60da80336b13fab5039e84fc8803ade278ed2edb (patch)
treef88948b6e39138a4d08dae68c72f5c90d0a502c5
parent3ebb80f9e35d84a185dd7e49f6092fb7621ea1d7 (diff)
build-aux,struct: setup base logic to abort early
-rw-r--r--build-aux/mbim-codegen/Struct.py26
1 files changed, 22 insertions, 4 deletions
diff --git a/build-aux/mbim-codegen/Struct.py b/build-aux/mbim-codegen/Struct.py
index 7e874d0..5fb11a6 100644
--- a/build-aux/mbim-codegen/Struct.py
+++ b/build-aux/mbim-codegen/Struct.py
@@ -413,12 +413,13 @@ class Struct:
' guint32 relative_offset,\n'
' guint32 *bytes_read)\n'
'{\n'
+ ' gboolean success = FALSE;\n'
' ${name} *out;\n'
' guint32 offset = relative_offset;\n'
'\n'
' g_assert (self != NULL);\n'
'\n'
- ' out = g_new (${name}, 1);\n')
+ ' out = g_new0 (${name}, 1);\n')
for field in self.contents:
translations['field_name_underscore'] = utils.build_underscore_name_from_camelcase(field['name'])
@@ -530,10 +531,27 @@ class Struct:
template += (
'\n'
- ' if (bytes_read)\n'
- ' *bytes_read = (offset - relative_offset);\n'
+ ' success = TRUE;\n'
'\n'
- ' return out;\n'
+ ' if (success) {\n'
+ ' if (bytes_read)\n'
+ ' *bytes_read = (offset - relative_offset);\n'
+ ' return out;\n'
+ ' }\n'
+ '\n')
+
+ for field in self.contents:
+ translations['field_name_underscore'] = utils.build_underscore_name_from_camelcase(field['name'])
+ inner_template = ''
+ if field['format'] in ['ref-byte-array', 'ref-byte-array-no-offset', 'unsized-byte-array', 'byte-array', 'string']:
+ inner_template = (' g_free (out->${field_name_underscore});\n')
+ elif field['format'] == 'string-array':
+ inner_template = (' g_strfreev (out->${field_name_underscore});\n')
+ template += string.Template(inner_template).substitute(translations)
+
+ template += (
+ ' g_free (out);\n'
+ ' return NULL;\n'
'}\n')
cfile.write(string.Template(template).substitute(translations))