Fix: tests: fix unused-but-set warning in test_fd_tracker.c
[lttng-tools.git] / src / bin / lttng-sessiond / ust-field-utils.c
index 8e890557b471efaab37c7dd59e69c94fb528081c..a89fade5ec93254c237a73a0d45e991e7a5e947e 100644 (file)
@@ -1,18 +1,8 @@
 /*
- * Copyright (C) 2018 Francis Deslauriers <francis.deslauriers@efficios.com>
+ * Copyright (C) 2018 Francis Deslauriers <francis.deslauriers@efficios.com>
  *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License, version 2 only, as
- * published by the Free Software Foundation.
+ * SPDX-License-Identifier: GPL-2.0-only
  *
- * This program 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 General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
 
 #include <stdbool.h>
 #include "ust-field-utils.h"
 
 /*
- * The ustctl_field is made of a combination of C basic types
- * ustctl_basic_type and _ustctl_basic_type.
+ * The lttng_ust_ctl_field is made of a combination of C basic types
+ * lttng_ust_ctl_basic_type and _lttng_ust_ctl_basic_type.
  *
- * ustctl_basic_type contains an enumeration describing the abstract type.
- * _ustctl_basic_type does _NOT_ contain an enumeration describing the
+ * lttng_ust_ctl_basic_type contains an enumeration describing the abstract type.
+ * _lttng_ust_ctl_basic_type does _NOT_ contain an enumeration describing the
  * abstract type.
  *
  * A layer is needed to use the same code for both structures.
- * When dealing with _ustctl_basic_type, we need to use the abstract type of
- * the ustctl_type struct.
+ * When dealing with _lttng_ust_ctl_basic_type, we need to use the abstract type of
+ * the lttng_ust_ctl_type struct.
  */
 
 /*
- * Compare two ustctl_integer_type fields.
+ * Compare two lttng_ust_ctl_integer_type fields.
  * Returns 1 if both are identical.
  */
-static bool match_ustctl_field_integer(const struct ustctl_integer_type *first,
-                       const struct ustctl_integer_type *second)
+static bool match_lttng_ust_ctl_field_integer(const struct lttng_ust_ctl_integer_type *first,
+                       const struct lttng_ust_ctl_integer_type *second)
 {
        if (first->size != second->size) {
                goto no_match;
@@ -66,23 +56,23 @@ no_match:
 }
 
 /*
- * Compare two _ustctl_basic_type fields known to be of type integer.
+ * Compare two _lttng_ust_ctl_basic_type fields known to be of type integer.
  * Returns 1 if both are identical.
  */
-static bool match_ustctl_field_integer_from_raw_basic_type(
-                       const union _ustctl_basic_type *first,
-                       const union _ustctl_basic_type *second)
+static bool match_lttng_ust_ctl_field_integer_from_raw_basic_type(
+                       const union _lttng_ust_ctl_basic_type *first,
+                       const union _lttng_ust_ctl_basic_type *second)
 {
-       return match_ustctl_field_integer(&first->integer, &second->integer);
+       return match_lttng_ust_ctl_field_integer(&first->integer, &second->integer);
 }
 
 /*
- * Compare two _ustctl_basic_type fields known to be of type enum.
+ * Compare two _lttng_ust_ctl_basic_type fields known to be of type enum.
  * Returns 1 if both are identical.
  */
-static bool match_ustctl_field_enum_from_raw_basic_type(
-               const union _ustctl_basic_type *first,
-               const union _ustctl_basic_type *second)
+static bool match_lttng_ust_ctl_field_enum_from_raw_basic_type(
+               const union _lttng_ust_ctl_basic_type *first,
+               const union _lttng_ust_ctl_basic_type *second)
 {
        /*
         * Compare enumeration ID. Enumeration ID is provided to the application by
@@ -97,10 +87,10 @@ static bool match_ustctl_field_enum_from_raw_basic_type(
         * during enum registration.
         */
        if (strncmp(first->enumeration.name, second->enumeration.name,
-                               LTTNG_UST_SYM_NAME_LEN)) {
+                               LTTNG_UST_ABI_SYM_NAME_LEN)) {
                goto no_match;
        }
-       if (!match_ustctl_field_integer(&first->enumeration.container_type,
+       if (!match_lttng_ust_ctl_field_integer(&first->enumeration.container_type,
                                &second->enumeration.container_type)) {
                goto no_match;
        }
@@ -112,23 +102,23 @@ no_match:
 }
 
 /*
- * Compare two _ustctl_basic_type fields known to be of type string.
+ * Compare two _lttng_ust_ctl_basic_type fields known to be of type string.
  * Returns 1 if both are identical.
  */
-static bool match_ustctl_field_string_from_raw_basic_type(
-               const union _ustctl_basic_type *first,
-               const union _ustctl_basic_type *second)
+static bool match_lttng_ust_ctl_field_string_from_raw_basic_type(
+               const union _lttng_ust_ctl_basic_type *first,
+               const union _lttng_ust_ctl_basic_type *second)
 {
        return first->string.encoding == second->string.encoding;
 }
 
 /*
- * Compare two _ustctl_basic_type fields known to be of type float.
+ * Compare two _lttng_ust_ctl_basic_type fields known to be of type float.
  * Returns 1 if both are identical.
  */
-static bool match_ustctl_field_float_from_raw_basic_type(
-               const union _ustctl_basic_type *first,
-               const union _ustctl_basic_type *second)
+static bool match_lttng_ust_ctl_field_float_from_raw_basic_type(
+               const union _lttng_ust_ctl_basic_type *first,
+               const union _lttng_ust_ctl_basic_type *second)
 {
        if (first->_float.exp_dig != second->_float.exp_dig) {
                goto no_match;
@@ -154,37 +144,37 @@ no_match:
 }
 
 /*
- * Compare two _ustctl_basic_type fields given their respective abstract types.
+ * Compare two _lttng_ust_ctl_basic_type fields given their respective abstract types.
  * Returns 1 if both are identical.
  */
-static bool match_ustctl_field_raw_basic_type(
-               enum ustctl_abstract_types first_atype,
-               const union _ustctl_basic_type *first,
-               enum ustctl_abstract_types second_atype,
-               const union _ustctl_basic_type *second)
+static bool match_lttng_ust_ctl_field_raw_basic_type(
+               enum lttng_ust_ctl_abstract_types first_atype,
+               const union _lttng_ust_ctl_basic_type *first,
+               enum lttng_ust_ctl_abstract_types second_atype,
+               const union _lttng_ust_ctl_basic_type *second)
 {
        if (first_atype != second_atype) {
                goto no_match;
        }
 
        switch (first_atype) {
-       case ustctl_atype_integer:
-               if (!match_ustctl_field_integer_from_raw_basic_type(first, second)) {
+       case lttng_ust_ctl_atype_integer:
+               if (!match_lttng_ust_ctl_field_integer_from_raw_basic_type(first, second)) {
                        goto no_match;
                }
                break;
-       case ustctl_atype_enum:
-               if (!match_ustctl_field_enum_from_raw_basic_type(first, second)) {
+       case lttng_ust_ctl_atype_enum:
+               if (!match_lttng_ust_ctl_field_enum_from_raw_basic_type(first, second)) {
                        goto no_match;
                }
                break;
-       case ustctl_atype_string:
-               if (!match_ustctl_field_string_from_raw_basic_type(first, second)) {
+       case lttng_ust_ctl_atype_string:
+               if (!match_lttng_ust_ctl_field_string_from_raw_basic_type(first, second)) {
                        goto no_match;
                }
                break;
-       case ustctl_atype_float:
-               if (!match_ustctl_field_float_from_raw_basic_type(first, second)) {
+       case lttng_ust_ctl_atype_float:
+               if (!match_lttng_ust_ctl_field_float_from_raw_basic_type(first, second)) {
                        goto no_match;
                }
                break;
@@ -199,21 +189,21 @@ no_match:
 }
 
 /*
- * Compatibility layer between the ustctl_basic_type struct and
- * _ustctl_basic_type union.
+ * Compatibility layer between the lttng_ust_ctl_basic_type struct and
+ * _lttng_ust_ctl_basic_type union.
  */
-static bool match_ustctl_field_basic_type(const struct ustctl_basic_type *first,
-               const struct ustctl_basic_type *second)
+static bool match_lttng_ust_ctl_field_basic_type(const struct lttng_ust_ctl_basic_type *first,
+               const struct lttng_ust_ctl_basic_type *second)
 {
-       return match_ustctl_field_raw_basic_type(first->atype, &first->u.basic,
+       return match_lttng_ust_ctl_field_raw_basic_type(first->atype, &first->u.basic,
                                second->atype, &second->u.basic);
 }
 
-int match_ustctl_field(const struct ustctl_field *first,
-               const struct ustctl_field *second)
+int match_lttng_ust_ctl_field(const struct lttng_ust_ctl_field *first,
+               const struct lttng_ust_ctl_field *second)
 {
        /* Check the name of the field is identical. */
-       if (strncmp(first->name, second->name, LTTNG_UST_SYM_NAME_LEN)) {
+       if (strncmp(first->name, second->name, LTTNG_UST_ABI_SYM_NAME_LEN)) {
                goto no_match;
        }
 
@@ -224,58 +214,118 @@ int match_ustctl_field(const struct ustctl_field *first,
 
        /* Check the field layout. */
        switch (first->type.atype) {
-       case ustctl_atype_integer:
-       case ustctl_atype_enum:
-       case ustctl_atype_string:
-       case ustctl_atype_float:
-               if (!match_ustctl_field_raw_basic_type(first->type.atype,
-                                       &first->type.u.basic, second->type.atype,
-                                       &second->type.u.basic)) {
+       case lttng_ust_ctl_atype_integer:
+       case lttng_ust_ctl_atype_enum:
+       case lttng_ust_ctl_atype_string:
+       case lttng_ust_ctl_atype_float:
+               if (!match_lttng_ust_ctl_field_raw_basic_type(first->type.atype,
+                                       &first->type.u.legacy.basic, second->type.atype,
+                                       &second->type.u.legacy.basic)) {
                        goto no_match;
                }
                break;
-       case ustctl_atype_sequence:
+       case lttng_ust_ctl_atype_sequence:
                /* Match element type of the sequence. */
-               if (!match_ustctl_field_basic_type(&first->type.u.sequence.elem_type,
-                                       &second->type.u.sequence.elem_type)) {
+               if (!match_lttng_ust_ctl_field_basic_type(&first->type.u.legacy.sequence.elem_type,
+                                       &second->type.u.legacy.sequence.elem_type)) {
                        goto no_match;
                }
 
                /* Match length type of the sequence. */
-               if (!match_ustctl_field_basic_type(&first->type.u.sequence.length_type,
-                                       &second->type.u.sequence.length_type)) {
+               if (!match_lttng_ust_ctl_field_basic_type(&first->type.u.legacy.sequence.length_type,
+                                       &second->type.u.legacy.sequence.length_type)) {
                        goto no_match;
                }
                break;
-       case ustctl_atype_array:
+       case lttng_ust_ctl_atype_array:
                /* Match element type of the array. */
-               if (!match_ustctl_field_basic_type(&first->type.u.array.elem_type,
-                                       &second->type.u.array.elem_type)) {
+               if (!match_lttng_ust_ctl_field_basic_type(&first->type.u.legacy.array.elem_type,
+                                       &second->type.u.legacy.array.elem_type)) {
                        goto no_match;
                }
 
                /* Match length of the array. */
-               if (first->type.u.array.length != second->type.u.array.length) {
+               if (first->type.u.legacy.array.length != second->type.u.legacy.array.length) {
                        goto no_match;
                }
                break;
-       case ustctl_atype_variant:
+       case lttng_ust_ctl_atype_variant:
                /* Compare number of choice of the variants. */
-               if (first->type.u.variant.nr_choices !=
-                                       second->type.u.variant.nr_choices) {
+               if (first->type.u.legacy.variant.nr_choices !=
+                                       second->type.u.legacy.variant.nr_choices) {
                        goto no_match;
                }
 
                /* Compare tag name of the variants. */
-               if (strncmp(first->type.u.variant.tag_name,
-                                       second->type.u.variant.tag_name,
-                                       LTTNG_UST_SYM_NAME_LEN)) {
+               if (strncmp(first->type.u.legacy.variant.tag_name,
+                                       second->type.u.legacy.variant.tag_name,
+                                       LTTNG_UST_ABI_SYM_NAME_LEN)) {
                        goto no_match;
                }
                break;
-       case ustctl_atype_struct:
+       case lttng_ust_ctl_atype_struct:
                /* Compare number of fields of the structs. */
-               if (first->type.u._struct.nr_fields != second->type.u._struct.nr_fields) {
+               if (first->type.u.legacy._struct.nr_fields != second->type.u.legacy._struct.nr_fields) {
+                       goto no_match;
+               }
+               break;
+       case lttng_ust_ctl_atype_sequence_nestable:
+               if (first->type.u.sequence_nestable.alignment != second->type.u.sequence_nestable.alignment) {
+                       goto no_match;
+               }
+               /* Compare length_name of the sequences. */
+               if (strncmp(first->type.u.sequence_nestable.length_name,
+                                       second->type.u.sequence_nestable.length_name,
+                                       LTTNG_UST_ABI_SYM_NAME_LEN)) {
+                       goto no_match;
+               }
+               /* Comparison will be done when marshalling following items. */
+               break;
+       case lttng_ust_ctl_atype_array_nestable:
+               if (first->type.u.array_nestable.alignment != second->type.u.array_nestable.alignment) {
+                       goto no_match;
+               }
+               /* Match length of the array. */
+               if (first->type.u.array_nestable.length != second->type.u.array_nestable.length) {
+                       goto no_match;
+               }
+               /* Comparison of element type will be done when marshalling following item. */
+               break;
+       case lttng_ust_ctl_atype_enum_nestable:
+               if (first->type.u.enum_nestable.id != second->type.u.enum_nestable.id) {
+                       goto no_match;
+               }
+               /* Compare name of the enums. */
+               if (strncmp(first->type.u.enum_nestable.name,
+                                       second->type.u.enum_nestable.name,
+                                       LTTNG_UST_ABI_SYM_NAME_LEN)) {
+                       goto no_match;
+               }
+               /* Comparison of element type will be done when marshalling following item. */
+               break;
+       case lttng_ust_ctl_atype_struct_nestable:
+               if (first->type.u.struct_nestable.alignment != second->type.u.struct_nestable.alignment) {
+                       goto no_match;
+               }
+               /* Compare number of fields of the structs. */
+               if (first->type.u.struct_nestable.nr_fields != second->type.u.struct_nestable.nr_fields) {
+                       goto no_match;
+               }
+               break;
+       case lttng_ust_ctl_atype_variant_nestable:
+               if (first->type.u.variant_nestable.alignment != second->type.u.variant_nestable.alignment) {
+                       goto no_match;
+               }
+               /* Compare number of choice of the variants. */
+               if (first->type.u.variant_nestable.nr_choices !=
+                                       second->type.u.variant_nestable.nr_choices) {
+                       goto no_match;
+               }
+
+               /* Compare tag name of the variants. */
+               if (strncmp(first->type.u.variant_nestable.tag_name,
+                                       second->type.u.variant_nestable.tag_name,
+                                       LTTNG_UST_ABI_SYM_NAME_LEN)) {
                        goto no_match;
                }
                break;
This page took 0.031117 seconds and 4 git commands to generate.