end:
return ret;
}
+
+enum lttng_session_descriptor_status lttng_session_descriptor_get_trace_format_descriptor(
+ const struct lttng_session_descriptor *session_descriptor,
+ const struct lttng_trace_format_descriptor **trace_format_descriptor)
+{
+ *trace_format_descriptor = reinterpret_cast<const lttng_trace_format_descriptor *>(
+ session_descriptor->format_descriptor);
+ return LTTNG_SESSION_DESCRIPTOR_STATUS_OK;
+}
+
+/* trace_format_descriptor is copied internally */
+enum lttng_session_descriptor_status lttng_session_descriptor_set_trace_format_descriptor(
+ struct lttng_session_descriptor *session_descriptor,
+ const struct lttng_trace_format_descriptor *trace_format_descriptor)
+{
+ if (!session_descriptor || !trace_format_descriptor) {
+ return LTTNG_SESSION_DESCRIPTOR_STATUS_INVALID;
+ }
+
+ try {
+ lttng::trace_format_descriptor::uptr copy =
+ reinterpret_cast<const lttng::trace_format_descriptor *>(
+ trace_format_descriptor)
+ ->clone();
+ delete session_descriptor->format_descriptor;
+ session_descriptor->format_descriptor = copy.release();
+ } catch (const std::exception& ex) {
+ return LTTNG_SESSION_DESCRIPTOR_STATUS_INVALID;
+ }
+
+ return LTTNG_SESSION_DESCRIPTOR_STATUS_OK;
+}