- const struct type_integer *integer_type = src->integer_type;
-
- if (!integer_type->signedness) {
- uint64_t v;
-
- v = ctf_uint_read(pos, integer_type);
- return enum_uint_to_quark_set(src, v);
- } else {
- int64_t v;
-
- v = ctf_int_read(pos, integer_type);
- return enum_int_to_quark_set(src, v);
- }
+ struct definition_enum *enum_definition =
+ container_of(definition, struct definition_enum, p);
+ const struct declaration_enum *enum_declaration =
+ enum_definition->declaration;
+ struct definition_integer *integer_definition =
+ enum_definition->integer;
+ const struct declaration_integer *integer_declaration =
+ integer_definition->declaration;
+ GArray *qs;
+ int ret;
+
+ ret = ctf_integer_read(ppos, &integer_definition->p);
+ if (ret)
+ return ret;
+ if (!integer_declaration->signedness)
+ qs = enum_uint_to_quark_set(enum_declaration,
+ integer_definition->value._unsigned);
+ else
+ qs = enum_int_to_quark_set(enum_declaration,
+ integer_definition->value._signed);
+ assert(qs);
+ /* unref previous quark set */
+ if (enum_definition->value)
+ g_array_unref(enum_definition->value);
+ enum_definition->value = qs;
+ return 0;