diff options
| author | Cyrille Bagard <nocbos@gmail.com> | 2024-08-24 22:30:08 (GMT) | 
|---|---|---|
| committer | Cyrille Bagard <nocbos@gmail.com> | 2024-08-24 22:30:08 (GMT) | 
| commit | f505830e800e4061d6e57c2b0769f956e70a2d84 (patch) | |
| tree | 4c41123d39586122b732defe0faad1d4158ec5a7 /src/core | |
| parent | 70f5f1c083158ea01513bc07955d62b3b3f43795 (diff) | |
Load (some) core components again.
Diffstat (limited to 'src/core')
| -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 | 
5 files changed, 170 insertions, 53 deletions
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 */  | 
