trigger: implement listing of registered trigger
[lttng-tools.git] / src / common / session-consumed-size.c
index f2ae65a9e22cb2963db00c97cf58dcaa2cb47f07..e147d1e5ffcf0536d8e7b32595b39ce9be0f042e 100644 (file)
@@ -1,22 +1,13 @@
 /*
- * Copyright (C) 2017 Jérémie Galarneau <jeremie.galarneau@efficios.com>
+ * Copyright (C) 2017 Jérémie Galarneau <jeremie.galarneau@efficios.com>
  *
- * This library is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License, version 2.1 only,
- * as published by the Free Software Foundation.
+ * SPDX-License-Identifier: LGPL-2.1-only
  *
- * This library is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this library; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
 #include <lttng/condition/condition-internal.h>
 #include <lttng/condition/session-consumed-size-internal.h>
+#include <lttng/constant.h>
 #include <common/macros.h>
 #include <common/error.h>
 #include <assert.h>
@@ -58,11 +49,11 @@ bool lttng_condition_session_consumed_size_validate(
        consumed = container_of(condition, struct lttng_condition_session_consumed_size,
                        parent);
        if (!consumed->session_name) {
-               ERR("Invalid buffer condition: a target session name must be set.");
+               ERR("Invalid session consumed size condition: a target session name must be set.");
                goto end;
        }
        if (!consumed->consumed_threshold_bytes.set) {
-               ERR("Invalid session condition: a threshold must be set.");
+               ERR("Invalid session consumed size condition: a threshold must be set.");
                goto end;
        }
 
@@ -72,40 +63,46 @@ 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_payload *payload)
 {
-       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(&payload->buffer, &consumed_comm,
+                       sizeof(consumed_comm));
+       if (ret) {
+               goto end;
+       }
+
+       ret = lttng_dynamic_buffer_append(&payload->buffer, consumed->session_name,
+                       session_name_len);
+       if (ret) {
+               goto end;
        }
-       ret = size;
 end:
        return ret;
 }
@@ -130,8 +127,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;
        }
 
@@ -158,24 +156,26 @@ struct lttng_condition *lttng_condition_session_consumed_size_create(void)
 }
 
 static
-ssize_t init_condition_from_buffer(struct lttng_condition *condition,
-               const struct lttng_buffer_view *src_view)
+ssize_t init_condition_from_payload(struct lttng_condition *condition,
+               struct lttng_payload_view *src_view)
 {
        ssize_t ret, condition_size;
        enum lttng_condition_status status;
-       const struct lttng_condition_session_consumed_size_comm *condition_comm;
        const char *session_name;
-       struct lttng_buffer_view names_view;
+       struct lttng_buffer_view session_name_view;
+       const struct lttng_condition_session_consumed_size_comm *condition_comm;
+       struct lttng_payload_view condition_comm_view = lttng_payload_view_from_view(
+                       src_view, 0, sizeof(*condition_comm));
 
-       if (src_view->size < sizeof(*condition_comm)) {
+       if (!lttng_payload_view_is_valid(&condition_comm_view)) {
                ERR("Failed to initialize from malformed condition buffer: buffer too short to contain header");
                ret = -1;
                goto end;
        }
 
-       condition_comm = (const struct lttng_condition_session_consumed_size_comm *) src_view->data;
-       names_view = lttng_buffer_view_from_view(src_view,
-                       sizeof(*condition_comm), -1);
+       condition_comm = (typeof(condition_comm)) condition_comm_view.buffer.data;
+       session_name_view = lttng_buffer_view_from_view(&src_view->buffer,
+                       sizeof(*condition_comm), condition_comm->session_name_len);
 
        if (condition_comm->session_name_len > LTTNG_NAME_MAX) {
                ERR("Failed to initialize from malformed condition buffer: name exceeds LTTNG_MAX_NAME");
@@ -183,7 +183,7 @@ ssize_t init_condition_from_buffer(struct lttng_condition *condition,
                goto end;
        }
 
-       if (names_view.size < condition_comm->session_name_len) {
+       if (!lttng_buffer_view_is_valid(&session_name_view)) {
                ERR("Failed to initialize from malformed condition buffer: buffer too short to contain element names");
                ret = -1;
                goto end;
@@ -192,12 +192,12 @@ ssize_t init_condition_from_buffer(struct lttng_condition *condition,
        status = lttng_condition_session_consumed_size_set_threshold(condition,
                        condition_comm->consumed_threshold_bytes);
        if (status != LTTNG_CONDITION_STATUS_OK) {
-               ERR("Failed to initialize session consumed condition threshold");
+               ERR("Failed to initialize session consumed size condition threshold");
                ret = -1;
                goto end;
        }
 
-       session_name = names_view.data;
+       session_name = session_name_view.data;
        if (*(session_name + condition_comm->session_name_len - 1) != '\0') {
                ERR("Malformed session name encountered in condition buffer");
                ret = -1;
@@ -207,7 +207,7 @@ ssize_t init_condition_from_buffer(struct lttng_condition *condition,
        status = lttng_condition_session_consumed_size_set_session_name(condition,
                        session_name);
        if (status != LTTNG_CONDITION_STATUS_OK) {
-               ERR("Failed to set buffer consumed session name");
+               ERR("Failed to set session consumed size condition's session name");
                ret = -1;
                goto end;
        }
@@ -225,8 +225,8 @@ end:
 }
 
 LTTNG_HIDDEN
-ssize_t lttng_condition_session_consumed_size_create_from_buffer(
-               const struct lttng_buffer_view *view,
+ssize_t lttng_condition_session_consumed_size_create_from_payload(
+               struct lttng_payload_view *view,
                struct lttng_condition **_condition)
 {
        ssize_t ret;
@@ -238,7 +238,7 @@ ssize_t lttng_condition_session_consumed_size_create_from_buffer(
                goto error;
        }
 
-       ret = init_condition_from_buffer(condition, view);
+       ret = init_condition_from_payload(condition, view);
        if (ret < 0) {
                goto error;
        }
@@ -251,27 +251,26 @@ error:
 }
 
 static
-struct lttng_evaluation *create_evaluation_from_buffer(
-               enum lttng_condition_type type,
-               const struct lttng_buffer_view *view)
+struct lttng_evaluation *create_evaluation_from_payload(
+               const struct lttng_payload_view *view)
 {
        const struct lttng_evaluation_session_consumed_size_comm *comm =
-                       (const struct lttng_evaluation_session_consumed_size_comm *) view->data;
+                       (typeof(comm)) view->buffer.data;
        struct lttng_evaluation *evaluation = NULL;
 
-       if (view->size < sizeof(*comm)) {
+       if (view->buffer.size < sizeof(*comm)) {
                goto end;
        }
 
-       evaluation = lttng_evaluation_session_consumed_size_create(type,
+       evaluation = lttng_evaluation_session_consumed_size_create(
                        comm->session_consumed);
 end:
        return evaluation;
 }
 
 LTTNG_HIDDEN
-ssize_t lttng_evaluation_session_consumed_size_create_from_buffer(
-               const struct lttng_buffer_view *view,
+ssize_t lttng_evaluation_session_consumed_size_create_from_payload(
+               struct lttng_payload_view *view,
                struct lttng_evaluation **_evaluation)
 {
        ssize_t ret;
@@ -282,8 +281,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_payload(view);
        if (!evaluation) {
                ret = -1;
                goto error;
@@ -396,24 +394,18 @@ end:
 }
 
 static
-ssize_t lttng_evaluation_session_consumed_size_serialize(
-               struct lttng_evaluation *evaluation, char *buf)
+int lttng_evaluation_session_consumed_size_serialize(
+               const struct lttng_evaluation *evaluation,
+               struct lttng_payload *payload)
 {
-       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;
+       consumed = container_of(evaluation,
+                       struct lttng_evaluation_session_consumed_size, parent);
+       comm.session_consumed = consumed->session_consumed;
+       return lttng_dynamic_buffer_append(
+                       &payload->buffer, &comm, sizeof(comm));
 }
 
 static
@@ -429,7 +421,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;
 
@@ -438,7 +430,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.027558 seconds and 4 git commands to generate.