X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=formats%2Fctf%2Fir%2Fevent.c;h=c168854e244ad4f81d61df6e5e2009f5663a646c;hb=9c4c8f6e75e53013a3db715f4d7c0058b77fd9cc;hp=db55b26b5e68c0798ae7121151821954d85c14e5;hpb=e7cb4506856f5a4e5dce1df7b4cb84b7361cf618;p=babeltrace.git diff --git a/formats/ctf/ir/event.c b/formats/ctf/ir/event.c index db55b26b..c168854e 100644 --- a/formats/ctf/ir/event.c +++ b/formats/ctf/ir/event.c @@ -1230,3 +1230,71 @@ int bt_ctf_event_set_stream(struct bt_ctf_event *event, end: return ret; } + +struct bt_ctf_event *bt_ctf_event_copy(struct bt_ctf_event *event) +{ + struct bt_ctf_event *copy = NULL; + + if (!event) { + goto error; + } + + copy = g_new0(struct bt_ctf_event, 1); + if (!copy) { + goto error; + } + + bt_ctf_ref_init(©->ref_count); + copy->event_class = event->event_class; + bt_ctf_event_class_get(copy->event_class); + copy->stream = event->stream; + + if (event->event_header) { + copy->event_header = bt_ctf_field_copy(event->event_header); + + if (!copy->event_header) { + goto error; + } + } + + if (event->context_payload) { + copy->context_payload = bt_ctf_field_copy( + event->context_payload); + + if (!copy->context_payload) { + goto error; + } + } + + if (event->fields_payload) { + copy->fields_payload = bt_ctf_field_copy(event->fields_payload); + + if (!copy->fields_payload) { + goto error; + } + } + + return copy; + +error: + if (copy) { + if (copy->event_class) { + bt_ctf_event_class_put(copy->event_class); + } + + if (copy->event_header) { + bt_ctf_field_put(copy->event_header); + } + + if (copy->context_payload) { + bt_ctf_field_put(copy->context_payload); + } + + if (copy->fields_payload) { + bt_ctf_field_put(copy->fields_payload); + } + } + + g_free(copy); + return NULL; +}