Add deserialization of condition class
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 1 Mar 2017 03:04:26 +0000 (22:04 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Wed, 1 Mar 2017 04:02:50 +0000 (23:02 -0500)
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
include/lttng/condition/condition-internal.h
src/lib/lttng-ctl/condition.c

index 62df6c1e812d49949f4fda6a3efc25eb5bb7ca10..1c8f100e91a700b1768d598fc8e62a2edd3428e2 100644 (file)
@@ -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);
 
index b3091576a6011baf649d3b45e22913d9f1cc6c31..9f9795d5511446b04edd15f18864f29c6e808cb0 100644 (file)
@@ -16,6 +16,7 @@
  */
 
 #include <lttng/condition/condition-internal.h>
+#include <lttng/condition/buffer-usage-internal.h>
 #include <common/macros.h>
 #include <stdbool.h>
 #include <assert.h>
@@ -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;
+}
This page took 0.027295 seconds and 5 git commands to generate.