From: Jérémie Galarneau Date: Wed, 1 Mar 2017 03:01:18 +0000 (-0500) Subject: Add deserialization of action object X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=commitdiff_plain;h=b01b8a99f19c091ba719b8d51a3cd3eec44e93b5 Add deserialization of action object Signed-off-by: Jérémie Galarneau --- diff --git a/include/lttng/action/action-internal.h b/include/lttng/action/action-internal.h index 57a804d14..1ed585d68 100644 --- a/include/lttng/action/action-internal.h +++ b/include/lttng/action/action-internal.h @@ -44,4 +44,8 @@ bool lttng_action_validate(struct lttng_action *action); LTTNG_HIDDEN ssize_t lttng_action_serialize(struct lttng_action *action, char *buf); +LTTNG_HIDDEN +ssize_t lttng_action_create_from_buffer(const char *buf, + struct lttng_action **action); + #endif /* LTTNG_ACTION_INTERNAL_H */ diff --git a/src/lib/lttng-ctl/action.c b/src/lib/lttng-ctl/action.c index a97a3463f..7deb509e3 100644 --- a/src/lib/lttng-ctl/action.c +++ b/src/lib/lttng-ctl/action.c @@ -16,6 +16,7 @@ */ #include +#include #include enum lttng_action_type lttng_action_get_type(struct lttng_action *action) @@ -81,3 +82,36 @@ ssize_t lttng_action_serialize(struct lttng_action *action, char *buf) end: return ret; } + +LTTNG_HIDDEN +ssize_t lttng_action_create_from_buffer(const char *buf, + struct lttng_action **_action) +{ + ssize_t ret, action_size = sizeof(struct lttng_action_comm); + struct lttng_action *action; + struct lttng_action_comm *action_comm = + (struct lttng_action_comm *) buf; + + if (!buf || !_action) { + ret = -1; + goto end; + } + + switch (action_comm->action_type) { + case LTTNG_ACTION_TYPE_NOTIFY: + action = lttng_action_notify_create(); + break; + default: + ret = -1; + goto end; + } + + if (!action) { + ret = -1; + goto end; + } + ret = action_size; + *_action = action; +end: + return ret; +}