This function exports the list of events enabled in a trace.
Signed-off-by: Julien Desfossez <julien.desfossez@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
}
g_ptr_array_free(td->streams, TRUE);
}
+
+ if (td->event_declarations) {
+ for (i = 0; i < td->event_declarations->len; i++) {
+ struct bt_ctf_event_decl *event;
+
+ event = g_ptr_array_index(td->event_declarations, i);
+ g_free(event);
+ }
+ g_ptr_array_free(td->event_declarations, TRUE);
+ }
closedir(td->dir);
g_free(td);
}
return ret;
}
+
+int bt_ctf_get_event_decl_list(int handle_id, struct bt_context *ctx,
+ struct bt_ctf_event_decl const * const **list,
+ unsigned int *count)
+{
+ struct bt_trace_handle *handle;
+ struct trace_descriptor *td;
+ struct ctf_trace *tin;
+
+ if (!ctx)
+ goto error;
+
+ handle = g_hash_table_lookup(ctx->trace_handles,
+ (gpointer) (unsigned long) handle_id);
+ if (!handle)
+ goto error;
+
+ td = handle->td;
+ tin = container_of(td, struct ctf_trace, parent);
+
+ *list = (struct bt_ctf_event_decl const* const*) tin->event_declarations->pdata;
+ *count = tin->event_declarations->len;
+ return 0;
+
+error:
+ return -1;
+}
+
+const char *bt_ctf_get_decl_event_name(const struct bt_ctf_event_decl *event)
+{
+ if (!event)
+ return NULL;
+ return g_quark_to_string(event->parent.name);
+}
#include <babeltrace/ctf/metadata.h>
#include <babeltrace/uuid.h>
#include <babeltrace/endian.h>
+#include <babeltrace/ctf/events-internal.h>
#include "ctf-scanner.h"
#include "ctf-parser.h"
#include "ctf-ast.h"
int ret = 0;
struct ctf_node *iter;
struct ctf_event_declaration *event;
+ struct bt_ctf_event_decl *event_decl;
- event = g_new0(struct ctf_event_declaration, 1);
+ event_decl = g_new0(struct bt_ctf_event_decl, 1);
+ event = &event_decl->parent;
event->declaration_scope = new_declaration_scope(parent_declaration_scope);
event->loglevel = -1;
bt_list_for_each_entry(iter, &node->u.event.declaration_list, siblings) {
g_hash_table_insert(event->stream->event_quark_to_id,
(gpointer) (unsigned long) event->name,
&event->id);
+ g_ptr_array_add(trace->event_declarations, event_decl);
return 0;
error:
if (event->context_decl)
declaration_unref(&event->context_decl->p);
free_declaration_scope(event->declaration_scope);
- g_free(event);
+ g_free(event_decl);
return ret;
}
return -EEXIST;
trace->declaration_scope = new_declaration_scope(trace->root_declaration_scope);
trace->streams = g_ptr_array_new();
+ trace->event_declarations = g_ptr_array_new();
bt_list_for_each_entry(iter, &node->u.trace.declaration_list, siblings) {
ret = ctf_trace_declaration_visit(fd, depth + 1, iter, trace);
if (ret)
trace->packet_header_decl = NULL;
}
g_ptr_array_free(trace->streams, TRUE);
+ g_ptr_array_free(trace->event_declarations, TRUE);
free_declaration_scope(trace->declaration_scope);
trace->declaration_scope = NULL;
return ret;
GHashTable *clocks;
struct ctf_clock *single_clock; /* currently supports only one clock */
struct trace_collection *collection; /* Container of this trace */
+ GPtrArray *event_declarations; /* Array of all the struct bt_ctf_event_decl */
struct declaration_struct *packet_header_decl;
};
struct bt_ctf_event_decl {
- struct ctf_event_declaration *parent;
+ struct ctf_event_declaration parent;
};
struct bt_ctf_iter {
*/
#include <stdint.h>
+#include <babeltrace/context.h>
struct definition;
struct bt_ctf_event;
+struct bt_ctf_event_decl;
/*
* the top-level scopes in CTF
*/
int bt_ctf_field_get_error(void);
+/*
+ * bt_ctf_get_event_decl_list: set list pointer to an array of bt_ctf_event_decl
+ * pointers and set count to the number of elements in the array.
+ *
+ * Return 0 on success and a negative value on error.
+ */
+int bt_ctf_get_event_decl_list(int handle_id, struct bt_context *ctx,
+ struct bt_ctf_event_decl const * const **list,
+ unsigned int *count);
+
+/*
+ * bt_ctf_get_decl_event_name: return the name of the event or NULL on error
+ */
+const char *bt_ctf_get_decl_event_name(const struct bt_ctf_event_decl *event);
+
#endif /* _BABELTRACE_CTF_EVENTS_H */