diff options
-rw-r--r-- | src/app.c | 15 | ||||
-rw-r--r-- | src/core/Makefile.am | 4 | ||||
-rw-r--r-- | src/core/core.c | 75 | ||||
-rw-r--r-- | src/core/core.h | 11 | ||||
-rw-r--r-- | src/core/global.c | 108 | ||||
-rw-r--r-- | src/core/global.h | 25 |
6 files changed, 184 insertions, 54 deletions
@@ -35,9 +35,11 @@ #include "app.h" #include "common/io.h" #include "common/xdg.h" +#include "core/core.h" #include "core/logs.h" #include "gui/core/core.h" #include "gui/window.h" +#include "plugins/pglist.h" @@ -503,9 +505,14 @@ int main(int argc, char **argv) set_log_verbosity(verbosity); - if (!load_gui_components(AGC_BUFFER_FEATURES | AGC_PANELS)) + if (!load_core_components(ACC_GLOBAL_VARS)) goto exit; + if (!load_gui_components(AGC_BUFFER_FEATURES | AGC_PANELS)) + goto exit_with_core; + + init_all_plugins(true); + ensure_wm_icon_and_name(); g_set_prgname("Chrysalide"); @@ -516,8 +523,14 @@ int main(int argc, char **argv) g_object_unref(G_OBJECT(app)); + exit_all_plugins(); + unload_gui_components(AGC_BUFFER_FEATURES | AGC_PANELS); + exit_with_core: + + unload_core_components(ACC_GLOBAL_VARS); + exit: return result; diff --git a/src/core/Makefile.am b/src/core/Makefile.am index 88d2892..de34d03 100644 --- a/src/core/Makefile.am +++ b/src/core/Makefile.am @@ -4,9 +4,7 @@ noinst_LTLIBRARIES = libcore4.la # libcore.la libcore_la_SOURCES = \ collections.h collections.c \ columns.h \ - core.h core.c \ demanglers.h demanglers.c \ - global.h global.c \ logs.h logs.c \ params.h params.c \ paths.h paths.c \ @@ -17,6 +15,8 @@ libcore_la_CFLAGS = $(TOOLKIT_CFLAGS) $(LIBXML_CFLAGS) libcore4_la_SOURCES = \ + core.h core.c \ + global.h global.c \ logs.h logs.c \ nproc.h nproc.c \ paths.h paths.c diff --git a/src/core/core.c b/src/core/core.c index f67e23d..1f40cb3 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -2,7 +2,7 @@ /* Chrysalide - Outil d'analyse de fichiers binaires * core.c - chargement et le déchargement du tronc commun * - * Copyright (C) 2014-2019 Cyrille Bagard + * Copyright (C) 2014-2024 Cyrille Bagard * * This file is part of Chrysalide. * @@ -24,6 +24,77 @@ #include "core.h" +#include "global.h" + + + +/* Statuts de chargement */ +static AvailableCoreComponent __loaded = ACC_NONE; + + +/****************************************************************************** +* * +* Paramètres : flags = liste d'éléments à 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) +{ + bool result; /* Bilan à retourner */ + + result = true; + + if ((flags & ACC_GLOBAL_VARS) != 0 && (__loaded & ACC_GLOBAL_VARS) == 0) + { + set_work_queue(g_work_queue_new()); + + __loaded |= ACC_GLOBAL_VARS; + + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : flags = 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_GLOBAL_VARS) != 0 && (__loaded & ACC_GLOBAL_VARS) == 0) + { + set_work_queue(NULL); + + __loaded &= ~ACC_GLOBAL_VARS; + + } + +} + + + + + + + +#if 0 + #include <stdlib.h> #include <time.h> #include <unistd.h> @@ -255,3 +326,5 @@ void unload_core_components(AvailableCoreComponent flags) } } + +#endif diff --git a/src/core/core.h b/src/core/core.h index def2813..7c50f6c 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -2,7 +2,7 @@ /* Chrysalide - Outil d'analyse de fichiers binaires * core.h - prototypes pour le chargement et le déchargement du tronc commun * - * Copyright (C) 2014-2018 Cyrille Bagard + * Copyright (C) 2014-2024 Cyrille Bagard * * This file is part of Chrysalide. * @@ -29,16 +29,11 @@ -/* Charge les éléments de base du programme. */ -bool load_all_core_components(bool); - -/* Décharge les éléments de base du programme. */ -void unload_all_core_components(bool); - - /* Eléments à (dé)charger disponibles */ typedef enum _AvailableCoreComponent { + ACC_NONE = (0 << 0), /* Statut initial */ + ACC_GLOBAL_VARS = (1 << 0), /* Singletons globaux */ ACC_SCAN_FEATURES = (1 << 0), /* Espace de noms pour scan */ } AvailableCoreComponent; diff --git a/src/core/global.c b/src/core/global.c index c99d711..83d8f4a 100644 --- a/src/core/global.c +++ b/src/core/global.c @@ -2,7 +2,7 @@ /* Chrysalide - Outil d'analyse de fichiers binaires * global.c - conservation et accès aux variables globales * - * Copyright (C) 2017-2019 Cyrille Bagard + * Copyright (C) 2017-2024 Cyrille Bagard * * This file is part of Chrysalide. * @@ -24,38 +24,19 @@ #include "global.h" -#include <assert.h> - +#include "../glibext/helpers.h" -/* Mode de fonctionnement */ -static bool _batch_mode = false; /* Gestionnaire de tâches parallèles */ static GWorkQueue *_queue = NULL; -/* Explorateur de contenus */ -static GContentExplorer *_explorer = NULL; - -/* Résolveur de contenus */ -static GContentResolver *_resolver = NULL; - -/* Espace de noms racine pour ROST */ -static GScanNamespace *_rost_root_ns = NULL; - -/* Projet global actif */ -static GStudyProject *_project = NULL; - -/* Avertisseur de changement de projet principal */ -static current_project_change_cb _project_notify = NULL; - - /****************************************************************************** * * -* Paramètres : - * +* Paramètres : queue = nouveau gestionnaire à mémoriser ou NULL. * * * -* Description : Note un mode d'exécution sans interface. * +* Description : Définit le gestionnaire de traitements parallèles courant. * * * * Retour : - * * * @@ -63,9 +44,12 @@ static current_project_change_cb _project_notify = NULL; * * ******************************************************************************/ -void set_batch_mode(void) +void set_work_queue(/* __steal */GWorkQueue *queue) { - _batch_mode = true; + if (_queue != NULL) + unref_object(_queue); + + _queue = queue; } @@ -74,26 +58,70 @@ void set_batch_mode(void) * * * Paramètres : - * * * -* Description : Indique le mode d'exécution courant du programme. * +* Description : Fournit le gestionnaire de traitements parallèles courant. * * * -* Retour : true si le fonctionnement est sans interface. * +* Retour : Gestionnaire de traitements parallèles courant. * * * * Remarques : - * * * ******************************************************************************/ -bool is_batch_mode(void) +GWorkQueue *get_work_queue(void) { - return _batch_mode; + ref_object(_queue); + + return _queue; } + + + + + + + + + + + + + +#if 0 + +#include <assert.h> + + + +/* Mode de fonctionnement */ +static bool _batch_mode = false; + +/* Gestionnaire de tâches parallèles */ +//static GWorkQueue *_queue = NULL; + +/* Explorateur de contenus */ +static GContentExplorer *_explorer = NULL; + +/* Résolveur de contenus */ +static GContentResolver *_resolver = NULL; + +/* Espace de noms racine pour ROST */ +static GScanNamespace *_rost_root_ns = NULL; + +/* Projet global actif */ +static GStudyProject *_project = NULL; + +/* Avertisseur de changement de projet principal */ +static current_project_change_cb _project_notify = NULL; + + + /****************************************************************************** * * -* Paramètres : queue = nouveau gestionnaire à mémoriser ou NULL. * +* Paramètres : - * * * -* Description : Définit le gestionnaire de traitements parallèles courant. * +* Description : Note un mode d'exécution sans interface. * * * * Retour : - * * * @@ -101,11 +129,9 @@ bool is_batch_mode(void) * * ******************************************************************************/ -void set_work_queue(GWorkQueue *queue) +void set_batch_mode(void) { - assert(_queue == NULL); - - _queue = queue; + _batch_mode = true; } @@ -114,21 +140,23 @@ void set_work_queue(GWorkQueue *queue) * * * Paramètres : - * * * -* Description : Fournit le gestionnaire de traitements parallèles courant. * +* Description : Indique le mode d'exécution courant du programme. * * * -* Retour : Gestionnaire de traitements parallèles courant. * +* Retour : true si le fonctionnement est sans interface. * * * * Remarques : - * * * ******************************************************************************/ -GWorkQueue *get_work_queue(void) +bool is_batch_mode(void) { - return _queue; + return _batch_mode; } + + /****************************************************************************** * * * Paramètres : explorer = éventuelle adresse du nouveau gestionnaire. * @@ -343,3 +371,5 @@ void register_project_change_notification(current_project_change_cb notify) _project_notify = notify; } + +#endif diff --git a/src/core/global.h b/src/core/global.h index 0a9172b..61b7712 100644 --- a/src/core/global.h +++ b/src/core/global.h @@ -2,7 +2,7 @@ /* Chrysalide - Outil d'analyse de fichiers binaires * global.h - prototypes pour la conservation et l'accès aux variables globales * - * Copyright (C) 2017-2018 Cyrille Bagard + * Copyright (C) 2017-2024 Cyrille Bagard * * This file is part of Chrysalide. * @@ -25,6 +25,22 @@ #define _CORE_GLOBAL_H +#include "../glibext/workqueue.h" + + + +/* Définit le gestionnaire de traitements parallèles courant. */ +void set_work_queue(/* __steal */GWorkQueue *); + +/* Fournit le gestionnaire de traitements parallèles courant. */ +GWorkQueue *get_work_queue(void); + + + + + +#if 0 + #include <stdbool.h> @@ -42,10 +58,10 @@ void set_batch_mode(void); bool is_batch_mode(void); /* Définit le gestionnaire de traitements parallèles courant. */ -void set_work_queue(GWorkQueue *); +//void set_work_queue(GWorkQueue *); /* Fournit le gestionnaire de traitements parallèles courant. */ -GWorkQueue *get_work_queue(void); +//GWorkQueue *get_work_queue(void); /* Définit l'adresse de l'explorateur de contenus courant. */ void set_current_content_explorer(GContentExplorer *); @@ -78,5 +94,8 @@ typedef void (* current_project_change_cb) (GStudyProject *, bool); void register_project_change_notification(current_project_change_cb); +#endif + + #endif /* _CORE_GLOBAL_H */ |