From 6c6e6b5ec27e2c236bd339a317e5bbf049eccefa Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Sat, 20 Jan 2024 23:59:55 +0100 Subject: Select core components to load. --- src/core/core.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/core/core.h | 14 +++++++++++ src/rost.c | 10 +++++--- 3 files changed, 97 insertions(+), 3 deletions(-) diff --git a/src/core/core.c b/src/core/core.c index 7e48662..636e41e 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -179,3 +179,79 @@ void unload_all_core_components(bool cs) ERR_free_strings(); } + + +/****************************************************************************** +* * +* Paramètres : selected = liste d'éléments à décharger. * +* * +* Description : Charge une sélection d'éléments de base du programme. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool load_core_components(AvailableCoreComponent flags) +{ + static bool result = false; /* Bilan à retourner */ + static bool done = false; /* Mémorisation des passages */ + GScanNamespace *root_ns; /* Espace de noms ROST racine */ + + /** + * On mémorise les passages réussis. + */ + if (!done) + { + done = true; + result = true; + + if (flags & ACC_SCAN_FEATURES) + { +#ifdef INCLUDE_MAGIC_SUPPORT + if (result) result = init_magic_cookie(); +#endif + + root_ns = g_scan_namespace_new(NULL); + set_rost_root_namespace(root_ns); + g_object_unref(G_OBJECT(root_ns)); + + if (result) result = populate_main_scan_namespace(root_ns); + if (result) result = load_all_known_scan_token_modifiers(); + + } + + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : selected = liste d'éléments à décharger. * +* * +* Description : Décharge une sélection d'éléments de base du programme. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void unload_core_components(AvailableCoreComponent flags) +{ + if (flags & ACC_SCAN_FEATURES) + { + unload_all_scan_token_modifiers(); + set_rost_root_namespace(NULL); + +#ifdef INCLUDE_MAGIC_SUPPORT + exit_magic_cookie(); +#endif + + } + +} diff --git a/src/core/core.h b/src/core/core.h index 0221f56..def2813 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -36,5 +36,19 @@ bool load_all_core_components(bool); void unload_all_core_components(bool); +/* Eléments à (dé)charger disponibles */ +typedef enum _AvailableCoreComponent +{ + ACC_SCAN_FEATURES = (1 << 0), /* Espace de noms pour scan */ + +} AvailableCoreComponent; + +/* Charge une sélection d'éléments de base du programme. */ +bool load_core_components(AvailableCoreComponent); + +/* Décharge une sélection d'éléments de base du programme. */ +void unload_core_components(AvailableCoreComponent); + + #endif /* _CORE_CORE_H */ diff --git a/src/rost.c b/src/rost.c index ba19b4f..297320d 100644 --- a/src/rost.c +++ b/src/rost.c @@ -387,10 +387,14 @@ int main(int argc, char **argv) set_log_verbosity(verbosity); - if (!load_all_core_components(true)) +#define CORE_COMPONENTS (ACC_SCAN_FEATURES) + + if (!load_core_components(CORE_COMPONENTS)) goto done; + /* init_all_plugins(true); + */ if (dump_modifiers) { @@ -534,13 +538,13 @@ int main(int argc, char **argv) remember_gtypes_for_leaks(); #endif - unload_all_core_components(true); + unload_core_components(CORE_COMPONENTS); #ifdef TRACK_GOBJECT_LEAKS dump_remaining_gtypes(); #endif - exit_all_plugins(); + //exit_all_plugins(); done: -- cgit v0.11.2-87-g4458