+ }
+
+end:
+ return current_action;
+}
+
+static
+bool is_valid_action_path(const struct lttng_trigger *trigger,
+ const struct lttng_action_path *action_path)
+{
+ /*
+ * While 'trigger's constness is casted-away, the trigger and resulting
+ * action are not modified; we merely check for the action's existence.
+ */
+ return !!get_trigger_action_from_path(
+ (struct lttng_trigger *) trigger, action_path);
+}
+
+struct lttng_error_query *lttng_error_query_action_create(
+ const struct lttng_trigger *trigger,
+ const struct lttng_action_path *action_path)
+{
+ struct lttng_error_query_action *query = NULL;
+ struct lttng_trigger *trigger_copy = NULL;
+ int ret_copy;
+
+ if (!trigger || !action_path ||
+ !is_valid_action_path(trigger, action_path)) {
+ goto end;
+ }
+
+ trigger_copy = lttng_trigger_copy(trigger);
+ if (!trigger_copy) {