diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2019-11-26 13:13:04 +0100 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2019-11-26 14:55:01 +0100 |
commit | 60da80336b13fab5039e84fc8803ade278ed2edb (patch) | |
tree | f88948b6e39138a4d08dae68c72f5c90d0a502c5 | |
parent | 3ebb80f9e35d84a185dd7e49f6092fb7621ea1d7 (diff) |
build-aux,struct: setup base logic to abort early
-rw-r--r-- | build-aux/mbim-codegen/Struct.py | 26 |
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)) |