X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=lib%2Fctf-ir%2Fevent-header-field.c;h=dd2b2fffd3a385511c88814c518b65f7e8cb7b93;hp=40c87497158ced6e76d21568749aafbd78d2e591;hb=44c440bc5fe8219cc17d1b786d91fd83c4c9860a;hpb=c800eb3790218d2f33df01e77ec38cbd43cc02a1 diff --git a/lib/ctf-ir/event-header-field.c b/lib/ctf-ir/event-header-field.c index 40c87497..dd2b2fff 100644 --- a/lib/ctf-ir/event-header-field.c +++ b/lib/ctf-ir/event-header-field.c @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -35,8 +36,6 @@ struct bt_field *bt_event_header_field_borrow_field( struct bt_field_wrapper *field_wrapper = (void *) header_field; BT_ASSERT_PRE_NON_NULL(field_wrapper, "Event header field"); - BT_ASSERT_PRE_NON_NULL(field_wrapper->field, - "Event header field's field object"); return (void *) field_wrapper->field; } @@ -55,3 +54,37 @@ void bt_event_header_field_release(struct bt_event_header_field *header_field) */ bt_field_wrapper_destroy(field_wrapper); } + +struct bt_event_header_field *bt_event_header_field_create( + struct bt_stream_class *stream_class) +{ + struct bt_field_wrapper *field_wrapper; + + BT_ASSERT_PRE_NON_NULL(stream_class, "Stream class"); + BT_ASSERT_PRE(bt_stream_class_borrow_trace_inline(stream_class), + "Stream class is not part of a trace: %!+S", stream_class); + BT_ASSERT_PRE(stream_class->event_header_ft, + "Stream class has no event header field type: %!+S", + stream_class); + field_wrapper = bt_field_wrapper_create( + &stream_class->event_header_field_pool, + (void *) stream_class->event_header_ft); + if (!field_wrapper) { + BT_LIB_LOGE("Cannot allocate one event header field from stream class: " + "%![sc-]+S", stream_class); + goto error; + } + + BT_ASSERT(field_wrapper->field); + bt_stream_class_freeze(stream_class); + goto end; + +error: + if (field_wrapper) { + bt_field_wrapper_destroy(field_wrapper); + field_wrapper = NULL; + } + +end: + return (void *) field_wrapper; +}