Fix: assume that conditions are valid before being compared
[lttng-tools.git] / src / common / session-consumed-size.c
index cc5b790e23a4c18d5b6e419020ae1a79ed9e4786..e60437d13d3177294d714965dace7212c62b498d 100644 (file)
@@ -73,40 +73,45 @@ end:
 }
 
 static
-ssize_t lttng_condition_session_consumed_size_serialize(
-               const struct lttng_condition *condition, char *buf)
+int lttng_condition_session_consumed_size_serialize(
+               const struct lttng_condition *condition,
+               struct lttng_dynamic_buffer *buf)
 {
-       struct lttng_condition_session_consumed_size *consumed;
-       ssize_t ret, size;
+       int ret;
        size_t session_name_len;
+       struct lttng_condition_session_consumed_size *consumed;
+       struct lttng_condition_session_consumed_size_comm consumed_comm;
 
        if (!condition || !IS_CONSUMED_SIZE_CONDITION(condition)) {
                ret = -1;
                goto end;
        }
 
-       DBG("Serializing session consumed condition");
-       consumed = container_of(condition, struct lttng_condition_session_consumed_size,
+       DBG("Serializing session consumed size condition");
+       consumed = container_of(condition,
+                       struct lttng_condition_session_consumed_size,
                        parent);
-       size = sizeof(struct lttng_condition_session_consumed_size_comm);
+
        session_name_len = strlen(consumed->session_name) + 1;
        if (session_name_len > LTTNG_NAME_MAX) {
                ret = -1;
                goto end;
        }
-       size += session_name_len;
-       if (buf) {
-               struct lttng_condition_session_consumed_size_comm consumed_comm = {
-                       .consumed_threshold_bytes = consumed->consumed_threshold_bytes.value,
-                       .session_name_len = session_name_len,
-               };
 
-               memcpy(buf, &consumed_comm, sizeof(consumed_comm));
-               buf += sizeof(consumed_comm);
-               memcpy(buf, consumed->session_name, session_name_len);
-               buf += session_name_len;
+       consumed_comm.consumed_threshold_bytes =
+                       consumed->consumed_threshold_bytes.value;
+       consumed_comm.session_name_len = (uint32_t) session_name_len;
+
+       ret = lttng_dynamic_buffer_append(buf, &consumed_comm,
+                       sizeof(consumed_comm));
+       if (ret) {
+               goto end;
+       }
+       ret = lttng_dynamic_buffer_append(buf, consumed->session_name,
+                       session_name_len);
+       if (ret) {
+               goto end;
        }
-       ret = size;
 end:
        return ret;
 }
@@ -131,8 +136,9 @@ bool lttng_condition_session_consumed_size_is_equal(const struct lttng_condition
                }
        }
 
-       if ((a->session_name && !b->session_name) ||
-                       (!a->session_name && b->session_name)) {
+       assert(a->session_name);
+       assert(b->session_name);
+       if (strcmp(a->session_name, b->session_name)) {
                goto end;
        }
 
@@ -253,7 +259,6 @@ error:
 
 static
 struct lttng_evaluation *create_evaluation_from_buffer(
-               enum lttng_condition_type type,
                const struct lttng_buffer_view *view)
 {
        const struct lttng_evaluation_session_consumed_size_comm *comm =
@@ -264,7 +269,7 @@ struct lttng_evaluation *create_evaluation_from_buffer(
                goto end;
        }
 
-       evaluation = lttng_evaluation_session_consumed_size_create(type,
+       evaluation = lttng_evaluation_session_consumed_size_create(
                        comm->session_consumed);
 end:
        return evaluation;
@@ -283,8 +288,7 @@ ssize_t lttng_evaluation_session_consumed_size_create_from_buffer(
                goto error;
        }
 
-       evaluation = create_evaluation_from_buffer(
-                       LTTNG_CONDITION_TYPE_SESSION_CONSUMED_SIZE, view);
+       evaluation = create_evaluation_from_buffer(view);
        if (!evaluation) {
                ret = -1;
                goto error;
@@ -397,24 +401,17 @@ end:
 }
 
 static
-ssize_t lttng_evaluation_session_consumed_size_serialize(
-               struct lttng_evaluation *evaluation, char *buf)
+int lttng_evaluation_session_consumed_size_serialize(
+               struct lttng_evaluation *evaluation,
+               struct lttng_dynamic_buffer *buf)
 {
-       ssize_t ret;
        struct lttng_evaluation_session_consumed_size *consumed;
+       struct lttng_evaluation_session_consumed_size_comm comm;
 
        consumed = container_of(evaluation, struct lttng_evaluation_session_consumed_size,
                        parent);
-       if (buf) {
-               struct lttng_evaluation_session_consumed_size_comm comm = {
-                       .session_consumed = consumed->session_consumed,
-               };
-
-               memcpy(buf, &comm, sizeof(comm));
-       }
-
-       ret = sizeof(struct lttng_evaluation_session_consumed_size_comm);
-       return ret;
+       comm.session_consumed = consumed->session_consumed;
+       return lttng_dynamic_buffer_append(buf, &comm, sizeof(comm));
 }
 
 static
@@ -430,7 +427,7 @@ void lttng_evaluation_session_consumed_size_destroy(
 
 LTTNG_HIDDEN
 struct lttng_evaluation *lttng_evaluation_session_consumed_size_create(
-               enum lttng_condition_type type, uint64_t consumed)
+               uint64_t consumed)
 {
        struct lttng_evaluation_session_consumed_size *consumed_eval;
 
@@ -439,7 +436,7 @@ struct lttng_evaluation *lttng_evaluation_session_consumed_size_create(
                goto end;
        }
 
-       consumed_eval->parent.type = type;
+       consumed_eval->parent.type = LTTNG_CONDITION_TYPE_SESSION_CONSUMED_SIZE;
        consumed_eval->session_consumed = consumed;
        consumed_eval->parent.serialize = lttng_evaluation_session_consumed_size_serialize;
        consumed_eval->parent.destroy = lttng_evaluation_session_consumed_size_destroy;
This page took 0.025383 seconds and 4 git commands to generate.