From a365f2d0cf10fad063176af841e359f517efa5a4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Tue, 28 Feb 2017 22:04:26 -0500 Subject: [PATCH] Add deserialization of condition class MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérémie Galarneau --- include/lttng/condition/condition-internal.h | 5 +++ src/lib/lttng-ctl/condition.c | 43 ++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/include/lttng/condition/condition-internal.h b/include/lttng/condition/condition-internal.h index 62df6c1e8..1c8f100e9 100644 --- a/include/lttng/condition/condition-internal.h +++ b/include/lttng/condition/condition-internal.h @@ -35,12 +35,17 @@ struct lttng_condition { }; struct lttng_condition_comm { + /* enum lttng_condition_type */ int8_t condition_type; }; LTTNG_HIDDEN bool lttng_condition_validate(struct lttng_condition *condition); +LTTNG_HIDDEN +ssize_t lttng_condition_create_from_buffer(const char *buf, + struct lttng_condition **condition); + LTTNG_HIDDEN ssize_t lttng_condition_serialize(struct lttng_condition *action, char *buf); diff --git a/src/lib/lttng-ctl/condition.c b/src/lib/lttng-ctl/condition.c index b3091576a..9f9795d55 100644 --- a/src/lib/lttng-ctl/condition.c +++ b/src/lib/lttng-ctl/condition.c @@ -16,6 +16,7 @@ */ #include +#include #include #include #include @@ -84,3 +85,45 @@ ssize_t lttng_condition_serialize(struct lttng_condition *condition, char *buf) end: return ret; } + +LTTNG_HIDDEN +ssize_t lttng_condition_create_from_buffer(const char *buf, + struct lttng_condition **condition) +{ + ssize_t ret, condition_size = 0; + struct lttng_condition_comm *condition_comm = + (struct lttng_condition_comm *) buf; + + if (!buf || !condition) { + ret = -1; + goto end; + } + + condition_size += sizeof(*condition_comm); + buf += condition_size; + + switch (condition_comm->condition_type) { + case LTTNG_CONDITION_TYPE_BUFFER_USAGE_LOW: + ret = lttng_condition_buffer_usage_low_create_from_buffer(buf, + condition); + if (ret < 0) { + goto end; + } + condition_size += ret; + break; + case LTTNG_CONDITION_TYPE_BUFFER_USAGE_HIGH: + ret = lttng_condition_buffer_usage_high_create_from_buffer(buf, + condition); + if (ret < 0) { + goto end; + } + condition_size += ret; + break; + default: + ret = -1; + goto end; + } + ret = condition_size; +end: + return ret; +} -- 2.34.1