+static
+int append_metadata(struct lttng_live_ctx *ctx,
+ struct lttng_live_viewer_stream *viewer_stream)
+{
+ int ret;
+ struct lttng_live_viewer_stream *metadata;
+ char *metadata_buf = NULL;
+
+ printf_verbose("get_next_index: new metadata needed\n");
+ ret = get_new_metadata(ctx, viewer_stream, &metadata_buf);
+ if (ret < 0) {
+ free(metadata_buf);
+ goto error;
+ }
+
+ metadata = viewer_stream->ctf_trace->metadata_stream;
+ metadata->ctf_trace->metadata_fp =
+ babeltrace_fmemopen(metadata_buf,
+ metadata->metadata_len, "rb");
+ if (!metadata->ctf_trace->metadata_fp) {
+ perror("Metadata fmemopen");
+ free(metadata_buf);
+ ret = -1;
+ goto error;
+ }
+ ret = ctf_append_trace_metadata(
+ viewer_stream->ctf_trace->handle->td,
+ metadata->ctf_trace->metadata_fp);
+ /* We accept empty metadata packets */
+ if (ret != 0 && ret != -ENOENT) {
+ fprintf(stderr, "[error] Appending metadata\n");
+ goto error;
+ }
+ ret = 0;
+
+error:
+ return ret;
+}
+