From 6c6e6b5ec27e2c236bd339a317e5bbf049eccefa Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
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