/* Chrysalide - Outil d'analyse de fichiers binaires * modarg.h - prototypes pour la conservation d'arguments pour modificateurs * * Copyright (C) 2023 Cyrille Bagard * * This file is part of Chrysalide. * * Chrysalide is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * Chrysalide 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 Foobar. If not, see . */ #ifndef _ANALYSIS_SCAN_MODARG_H #define _ANALYSIS_SCAN_MODARG_H #include #include "../../../common/szstr.h" /* Types d'arguments pris en charge */ typedef enum _ModifierArgType { MAT_BOOLEAN, /* Valeur booléenne */ MAT_SIGNED_INTEGER, /* Nombre entier 64 bits #1 */ MAT_UNSIGNED_INTEGER, /* Nombre entier 64 bits #2 */ MAT_STRING, /* Chaîne de caractères */ MAT_RANGE, /* Séquence d'entiers */ } ModifierArgType; /* Argument pour modificateur de motif */ typedef struct _modifier_arg_t { ModifierArgType type; /* Type de valeur portée */ union { bool boolean; /* Valeur booléenne */ long long s_integer; /* Valeur entière 64 bits */ unsigned long long u_integer; /* Valeur entière 64 bits */ sized_string_t string; /* Chaîne de caractères */ struct { long long start; /* Point de départ */ long long end; /* Point d'arrivée */ } range; } value; } modifier_arg_t; #define exit_mod_arg(a) \ do \ { \ if ((a)->type == MAT_STRING) \ exit_szstr(&(a)->value.string); \ } \ while (0) #define copy_mod_arg(d, s) \ do \ { \ (d)->type = (s)->type; \ if ((s)->type == MAT_STRING) \ szstrdup(&(d)->value.string, &(s)->value.string); \ else \ *(d) = *(s); \ } \ while (0) #endif /* _ANALYSIS_SCAN_MODARG_H */