goto error;
}
+ var->type = BT_ENVIRONMENT_FIELD_TYPE_STRING;
escaped_value = g_strescape(value, NULL);
if (!escaped_value) {
ret = -1;
}
var->name = g_string_new(name);
- var->value = g_string_new(escaped_value);
+ var->value.string = g_string_new(escaped_value);
g_free(escaped_value);
- if (!var->name || !var->value) {
+ if (!var->name || !var->value.string) {
ret = -1;
goto error;
}
g_string_free(var->name, TRUE);
}
- if (var && var->value) {
- g_string_free(var->value, TRUE);
+ if (var && var->value.string) {
+ g_string_free(var->value.string, TRUE);
+ }
+
+ g_free(var);
+ return ret;
+}
+
+int bt_ctf_trace_add_environment_field_integer(struct bt_ctf_trace *trace,
+ const char *name,
+ int64_t value)
+{
+ struct environment_variable *var = NULL;
+ int ret = 0;
+
+ if (!trace || !name) {
+ ret = -1;
+ goto error;
+ }
+
+ var = g_new0(struct environment_variable, 1);
+ if (!var) {
+ ret = -1;
+ goto error;
+ }
+
+ var->type = BT_ENVIRONMENT_FIELD_TYPE_INTEGER;
+ var->name = g_string_new(name);
+ var->value.integer = value;
+ if (!var->name) {
+ ret = -1;
+ goto error;
+ }
+
+ g_ptr_array_add(trace->environment, var);
+ return ret;
+
+error:
+ if (var && var->name) {
+ g_string_free(var->name, TRUE);
}
g_free(var);
void append_env_field_metadata(struct environment_variable *var,
struct metadata_context *context)
{
- g_string_append_printf(context->string, "\t%s = \"%s\";\n",
- var->name->str, var->value->str);
+ switch (var->type) {
+ case BT_ENVIRONMENT_FIELD_TYPE_STRING:
+ g_string_append_printf(context->string, "\t%s = \"%s\";\n",
+ var->name->str, var->value.string->str);
+ break;
+ case BT_ENVIRONMENT_FIELD_TYPE_INTEGER:
+ g_string_append_printf(context->string, "\t%s = %" PRId64 ";\n",
+ var->name->str, var->value.integer);
+ break;
+ default:
+ assert(0);
+ }
}
static
void environment_variable_destroy(struct environment_variable *var)
{
g_string_free(var->name, TRUE);
- g_string_free(var->value, TRUE);
+ if (var->type == BT_ENVIRONMENT_FIELD_TYPE_STRING) {
+ g_string_free(var->value.string, TRUE);
+ }
g_free(var);
}
struct bt_ctf_stream_class;
struct bt_ctf_clock;
+enum bt_environment_field_type {
+ BT_ENVIRONMENT_FIELD_TYPE_UNKNOWN = -1,
+ BT_ENVIRONMENT_FIELD_TYPE_STRING = 0,
+ BT_ENVIRONMENT_FIELD_TYPE_INTEGER = 1,
+};
+
/*
* bt_ctf_trace_create: create a trace instance.
*
struct bt_ctf_stream_class *stream_class);
/*
- * bt_ctf_trace_add_environment_field: add an environment field to the trace.
+ * bt_ctf_trace_add_environment_field: add a string environment field to the
+ * trace.
*
- * Add an environment field to the trace. The name and value parameters are
- * copied.
+ * Add a string environment field to the trace. The name and value parameters
+ * are copied.
*
* @param trace Trace instance.
* @param name Name of the environment field (will be copied).
const char *name,
const char *value);
+/*
+ * bt_ctf_trace_add_environment_field_integer: add an integer environment
+ * field to the trace.
+ *
+ * Add an integer environment field to the trace. The name parameter is
+ * copied.
+ *
+ * @param trace Trace instance.
+ * @param name Name of the environment field (will be copied).
+ * @param value Value of the environment field.
+ *
+ * Returns 0 on success, a negative value on error.
+ */
+extern int bt_ctf_trace_add_environment_field_integer(
+ struct bt_ctf_trace *trace, const char *name,
+ int64_t value);
+
/*
* bt_ctf_trace_add_clock: add a clock to the trace.
*