summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/app.c15
-rw-r--r--src/core/Makefile.am4
-rw-r--r--src/core/core.c75
-rw-r--r--src/core/core.h11
-rw-r--r--src/core/global.c108
-rw-r--r--src/core/global.h25
6 files changed, 184 insertions, 54 deletions
diff --git a/src/app.c b/src/app.c
index 15fe255..2e0d4fa 100644
--- a/src/app.c
+++ b/src/app.c
@@ -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 */