{
struct declaration_integer *integer_declaration;
- integer_declaration = g_new(struct declaration_integer, 1);
+ integer_declaration = g_new0(struct declaration_integer, 1);
integer_declaration->p.id = CTF_TYPE_INTEGER;
integer_declaration->p.alignment = alignment;
integer_declaration->p.declaration_free = _integer_declaration_free;
struct definition_integer *integer;
int ret;
- integer = g_new(struct definition_integer, 1);
+ integer = g_new0(struct definition_integer, 1);
bt_declaration_ref(&integer_declaration->p);
integer->p.declaration = declaration;
integer->declaration = integer_declaration;
g_quark_to_string(field->name));
return (int64_t)integer_definition->value._unsigned;
}
+
+bool bt_int_is_char(const struct bt_declaration *field)
+{
+ bool ret;
+ struct declaration_integer *integer_declaration =
+ container_of(field, struct declaration_integer, p);
+
+ /* Integer must be ASCII or encoded as UTF-8. */
+ ret = integer_declaration->encoding == CTF_STRING_UTF8 ||
+ integer_declaration->encoding == CTF_STRING_ASCII;
+ /* Integer must be aligned on a byte boundary and be byte-sized. */
+ ret &= integer_declaration->len == CHAR_BIT &&
+ integer_declaration->p.alignment == CHAR_BIT;
+
+ return ret;
+}