X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=formats%2Fctf%2Fmetadata%2Fctf-visitor-generate-io-struct.c;fp=formats%2Fctf%2Fmetadata%2Fctf-visitor-generate-io-struct.c;h=98169457ffab32825580f57a0d79b7e8663a399d;hp=4515b53e437fb16238530f9371b20a745b79f2b2;hb=4e752ebc939db830c9d7e7c763f415744c9fc688;hpb=a88cb1c73648836f6d88e4d7cc5c100648414bc7 diff --git a/formats/ctf/metadata/ctf-visitor-generate-io-struct.c b/formats/ctf/metadata/ctf-visitor-generate-io-struct.c index 4515b53e..98169457 100644 --- a/formats/ctf/metadata/ctf-visitor-generate-io-struct.c +++ b/formats/ctf/metadata/ctf-visitor-generate-io-struct.c @@ -268,6 +268,14 @@ struct ctf_stream_declaration *trace_stream_lookup(struct ctf_trace *trace, uint return g_ptr_array_index(trace->streams, stream_id); } +static +struct ctf_event_declaration *stream_event_lookup(struct ctf_stream_declaration *stream, uint64_t event_id) +{ + if (stream->events_by_id->len <= event_id) + return NULL; + return g_ptr_array_index(stream->events_by_id, event_id); +} + static struct ctf_clock *trace_clock_lookup(struct ctf_trace *trace, GQuark clock_name) { @@ -1885,6 +1893,13 @@ int ctf_event_visit(FILE *fd, int depth, struct ctf_node *node, fprintf(fd, "[error] %s: missing id field in event declaration\n", __func__); goto error; } + /* Disallow re-using the same event ID in the same stream */ + if (stream_event_lookup(event->stream, event->id)) { + ret = -EPERM; + fprintf(fd, "[error] %s: event ID %" PRIu64 " used more than once in stream %" PRIu64 "\n", + __func__, event->id, event->stream_id); + goto error; + } if (event->stream->events_by_id->len <= event->id) g_ptr_array_set_size(event->stream->events_by_id, event->id + 1); g_ptr_array_index(event->stream->events_by_id, event->id) = event;