ir: add bt_ctf_event_set_payload_field()
[babeltrace.git] / formats / ctf / ir / event.c
index db55b26b5e68c0798ae7121151821954d85c14e5..7b8844beafb74e7dc00ec16cccdd3f865047c863 100644 (file)
@@ -704,6 +704,54 @@ end:
        return ret;
 }
 
+struct bt_ctf_field *bt_ctf_event_get_payload_field(struct bt_ctf_event *event)
+{
+       struct bt_ctf_field *payload = NULL;
+
+       if (!event || !event->fields_payload) {
+               goto end;
+       }
+
+       payload = event->fields_payload;
+       bt_ctf_field_get(payload);
+end:
+       return payload;
+}
+
+int bt_ctf_event_set_payload_field(struct bt_ctf_event *event,
+               struct bt_ctf_field *payload)
+{
+       int ret = 0;
+       struct bt_ctf_field_type *payload_type = NULL;
+
+       if (!event || !payload) {
+               ret = -1;
+               goto end;
+       }
+
+       payload_type = bt_ctf_field_get_type(payload);
+       if (!payload_type) {
+               ret = -1;
+               goto end;
+       }
+
+       if (bt_ctf_field_type_get_type_id(payload_type) != CTF_TYPE_STRUCT) {
+               ret = -1;
+               goto end;
+       }
+
+       bt_ctf_field_get(payload);
+       if (event->fields_payload) {
+               bt_ctf_field_put(event->fields_payload);
+       }
+       event->fields_payload = payload;
+
+end:
+       if (payload_type) {
+               bt_ctf_field_type_put(payload_type);
+       }
+       return ret;
+}
 
 struct bt_ctf_field *bt_ctf_event_get_payload(struct bt_ctf_event *event,
                const char *name)
@@ -1230,3 +1278,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(&copy->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;
+}
This page took 0.037197 seconds and 4 git commands to generate.