X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-field-utils.c;h=d7b6cfd2b9376b4f7f4bfbfd6fe4d50fcd7d7bf2;hp=8e890557b471efaab37c7dd59e69c94fb528081c;hb=b8a1b0bd3964381c9ec6a8df26bd37cd7405a83f;hpb=98b73e886719378d507d500058dd4e4d7e5488bf diff --git a/src/bin/lttng-sessiond/ust-field-utils.c b/src/bin/lttng-sessiond/ust-field-utils.c index 8e890557b..d7b6cfd2b 100644 --- a/src/bin/lttng-sessiond/ust-field-utils.c +++ b/src/bin/lttng-sessiond/ust-field-utils.c @@ -1,18 +1,8 @@ /* - * Copyright (C) 2018 - Francis Deslauriers + * Copyright (C) 2018 Francis Deslauriers * - * 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 @@ -229,53 +219,113 @@ int match_ustctl_field(const struct ustctl_field *first, 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)) { + &first->type.u.legacy.basic, second->type.atype, + &second->type.u.legacy.basic)) { goto no_match; } break; case ustctl_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_ustctl_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_ustctl_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: /* 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_ustctl_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: /* 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, + if (strncmp(first->type.u.legacy.variant.tag_name, + second->type.u.legacy.variant.tag_name, LTTNG_UST_SYM_NAME_LEN)) { goto no_match; } break; case ustctl_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 ustctl_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_SYM_NAME_LEN)) { + goto no_match; + } + /* Comparison will be done when marshalling following items. */ + break; + case ustctl_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 ustctl_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_SYM_NAME_LEN)) { + goto no_match; + } + /* Comparison of element type will be done when marshalling following item. */ + break; + case ustctl_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 ustctl_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_SYM_NAME_LEN)) { goto no_match; } break;