From 06b019a7f71e27f2fd0a0bc2d314911f6d8fa7bc Mon Sep 17 00:00:00 2001 From: Julien Desfossez Date: Thu, 15 Jun 2017 13:48:02 -0400 Subject: [PATCH] Fix: event_header is optional MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Julien Desfossez Signed-off-by: Jérémie Galarneau --- lib/ctf-ir/event.c | 18 ++-- lib/ctf-ir/stream.c | 20 ++-- plugins/libctfcopytrace/ctfcopytrace.c | 122 ++++++++++++------------- 3 files changed, 80 insertions(+), 80 deletions(-) diff --git a/lib/ctf-ir/event.c b/lib/ctf-ir/event.c index 47eeed46..b8a85ce1 100644 --- a/lib/ctf-ir/event.c +++ b/lib/ctf-ir/event.c @@ -868,14 +868,16 @@ int bt_ctf_event_validate(struct bt_ctf_event *event) struct bt_ctf_stream_class *stream_class = NULL; assert(event); - ret = bt_ctf_field_validate(event->event_header); - if (ret) { - BT_LOGD("Invalid event's header field: " - "event-addr=%p, event-class-name=\"%s\", " - "event-class-id=%" PRId64, - event, bt_ctf_event_class_get_name(event->event_class), - bt_ctf_event_class_get_id(event->event_class)); - goto end; + if (event->event_header) { + ret = bt_ctf_field_validate(event->event_header); + if (ret) { + BT_LOGD("Invalid event's header field: " + "event-addr=%p, event-class-name=\"%s\", " + "event-class-id=%" PRId64, + event, bt_ctf_event_class_get_name(event->event_class), + bt_ctf_event_class_get_id(event->event_class)); + goto end; + } } stream_class = bt_ctf_event_class_get_stream_class(event->event_class); diff --git a/lib/ctf-ir/stream.c b/lib/ctf-ir/stream.c index 3d21ecac..cc4d9795 100644 --- a/lib/ctf-ir/stream.c +++ b/lib/ctf-ir/stream.c @@ -1126,6 +1126,10 @@ static int auto_populate_event_header(struct bt_ctf_stream *stream, assert(event); + if (!event->event_header) { + goto end; + } + if (event->frozen) { BT_LOGW_STR("Cannot populate event header field: event is frozen."); ret = -1; @@ -1569,13 +1573,15 @@ int bt_ctf_stream_flush(struct bt_ctf_stream *stream) stream->pos.offset, stream->pos.packet_size); /* Write event header */ - BT_LOGV_STR("Serializing event's header field."); - ret = bt_ctf_field_serialize(event->event_header, - &stream->pos, native_byte_order); - if (ret) { - BT_LOGW("Cannot serialize event's header field: " - "field-addr=%p", event->event_header); - goto end; + if (event->event_header) { + BT_LOGV_STR("Serializing event's header field."); + ret = bt_ctf_field_serialize(event->event_header, + &stream->pos, native_byte_order); + if (ret) { + BT_LOGW("Cannot serialize event's header field: " + "field-addr=%p", event->event_header); + goto end; + } } /* Write stream event context */ diff --git a/plugins/libctfcopytrace/ctfcopytrace.c b/plugins/libctfcopytrace/ctfcopytrace.c index d3373c1e..c6b19932 100644 --- a/plugins/libctfcopytrace/ctfcopytrace.c +++ b/plugins/libctfcopytrace/ctfcopytrace.c @@ -410,40 +410,36 @@ struct bt_ctf_stream_class *ctf_copy_stream_class(FILE *err, } type = bt_ctf_stream_class_get_event_header_type(stream_class); - if (!type) { - fprintf(err, "[error] %s in %s:%d\n", __func__, __FILE__, - __LINE__); - goto error; - } - - if (override_ts64) { - struct bt_ctf_field_type *new_event_header_type; - - new_event_header_type = override_header_type(err, type, - writer_trace); - if (!new_event_header_type) { - fprintf(err, "[error] %s in %s:%d\n", __func__, __FILE__, - __LINE__); - goto error; - } - ret_int = bt_ctf_stream_class_set_event_header_type( - writer_stream_class, new_event_header_type); - BT_PUT(new_event_header_type); - if (ret_int < 0) { - fprintf(err, "[error] %s in %s:%d\n", __func__, __FILE__, - __LINE__); - goto error; - } - } else { - ret_int = bt_ctf_stream_class_set_event_header_type( - writer_stream_class, type); - if (ret_int < 0) { - fprintf(err, "[error] %s in %s:%d\n", __func__, __FILE__, - __LINE__); - goto error; + if (type) { + if (override_ts64) { + struct bt_ctf_field_type *new_event_header_type; + + new_event_header_type = override_header_type(err, type, + writer_trace); + if (!new_event_header_type) { + fprintf(err, "[error] %s in %s:%d\n", __func__, __FILE__, + __LINE__); + goto error; + } + ret_int = bt_ctf_stream_class_set_event_header_type( + writer_stream_class, new_event_header_type); + BT_PUT(new_event_header_type); + if (ret_int < 0) { + fprintf(err, "[error] %s in %s:%d\n", __func__, __FILE__, + __LINE__); + goto error; + } + } else { + ret_int = bt_ctf_stream_class_set_event_header_type( + writer_stream_class, type); + if (ret_int < 0) { + fprintf(err, "[error] %s in %s:%d\n", __func__, __FILE__, + __LINE__); + goto error; + } } + BT_PUT(type); } - BT_PUT(type); type = bt_ctf_stream_class_get_event_context_type(stream_class); if (type) { @@ -714,42 +710,38 @@ struct bt_ctf_event *ctf_copy_event(FILE *err, struct bt_ctf_event *event, } field = bt_ctf_event_get_header(event); - if (!field) { - fprintf(err, "[error] %s in %s:%d\n", __func__, - __FILE__, __LINE__); - goto error; - } - - /* - * If override_ts64, we override all integer fields mapped to a clock - * to a uint64_t field type, otherwise, we just copy it as is. - */ - if (override_ts64) { - copy_field = bt_ctf_event_get_header(writer_event); - if (!copy_field) { - fprintf(err, "[error] %s in %s:%d\n", __func__, - __FILE__, __LINE__); - goto error; - } + if (field) { + /* + * If override_ts64, we override all integer fields mapped to a clock + * to a uint64_t field type, otherwise, we just copy it as is. + */ + if (override_ts64) { + copy_field = bt_ctf_event_get_header(writer_event); + if (!copy_field) { + fprintf(err, "[error] %s in %s:%d\n", __func__, + __FILE__, __LINE__); + goto error; + } - ret = copy_override_field(err, event, writer_event, field, - copy_field); - if (ret) { - fprintf(err, "[error] %s in %s:%d\n", __func__, - __FILE__, __LINE__); - goto error; - } - BT_PUT(copy_field); - } else { - ret = ctf_copy_event_header(err, event, writer_event_class, - writer_event, field); - if (ret) { - fprintf(err, "[error] %s in %s:%d\n", __func__, - __FILE__, __LINE__); - goto error; + ret = copy_override_field(err, event, writer_event, field, + copy_field); + if (ret) { + fprintf(err, "[error] %s in %s:%d\n", __func__, + __FILE__, __LINE__); + goto error; + } + BT_PUT(copy_field); + } else { + ret = ctf_copy_event_header(err, event, writer_event_class, + writer_event, field); + if (ret) { + fprintf(err, "[error] %s in %s:%d\n", __func__, + __FILE__, __LINE__); + goto error; + } } + BT_PUT(field); } - BT_PUT(field); /* Optional field, so it can fail silently. */ field = bt_ctf_event_get_stream_event_context(event); -- 2.34.1