summaryrefslogtreecommitdiff
path: root/plugins/pe/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/pe/core.c')
-rw-r--r--plugins/pe/core.c280
1 files changed, 273 insertions, 7 deletions
diff --git a/plugins/pe/core.c b/plugins/pe/core.c
index e8e6f5e..42f712d 100644
--- a/plugins/pe/core.c
+++ b/plugins/pe/core.c
@@ -24,35 +24,244 @@
#include "core.h"
-#include <core/global.h>
+//#include <core/global.h>
#include <plugins/self.h>
+#include "core-int.h"
#include "format.h"
#ifdef INCLUDE_PYTHON3_BINDINGS
# include "python/module.h"
#endif
+
+/* ---------------------- COMPOSITION DE NOUVEAU GREFFON NATIF ---------------------- */
+
+
+/* Initialise la classe des greffons de support PE. */
+static void g_pe_plugin_class_init(GPePluginClass *);
+
+/* Procède à l'initialisation de l'interface de gestion. */
+//static void g_pe_plugin_plugin_manager_interface_init(GPluginManagerInterface *);
+
+/* Initialise une instance de greffon de support PE. */
+static void g_pe_plugin_init(GPePlugin *);
+
+/* Supprime toutes les références externes. */
+static void g_pe_plugin_dispose(GPePlugin *);
+
+/* Procède à la libération totale de la mémoire. */
+static void g_pe_plugin_finalize(GPePlugin *);
+
+
+
+/* --------------------- IMPLEMENTATION DES FONCTIONS DE CLASSE --------------------- */
+
+
+/* Prend acte de l'activation du greffon. */
+static bool g_pe_plugin_enable(GPePlugin *);
+
+/* Prend acte de l'extinction du greffon. */
+static void g_pe_plugin_disable(GPePlugin *);
+
+
+
+/* ---------------------------------------------------------------------------------- */
+/* COMPOSITION DE NOUVEAU GREFFON NATIF */
+/* ---------------------------------------------------------------------------------- */
+
+
+/* Indique le type défini pour un greffon de liaison Python */
+G_DEFINE_TYPE_WITH_CODE(GPePlugin, g_pe_plugin, G_TYPE_NATIVE_PLUGIN,
+ /*G_IMPLEMENT_INTERFACE(G_TYPE_PLUGIN_MANAGER, g_pe_plugin_plugin_manager_interface_init)*/);
+
+
+NATIVE_PLUGIN_ENTRYPOINT(g_pe_plugin_new);
+
+
+/******************************************************************************
+* *
+* Paramètres : class = classe à initialiser. *
+* *
+* Description : Initialise la classe des greffons de support PE. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_pe_plugin_class_init(GPePluginClass *class)
+{
+ GObjectClass *object; /* Autre version de la classe */
+ GPluginModuleClass *plugin; /* Version parente de la classe*/
+
+ object = G_OBJECT_CLASS(class);
+
+ object->dispose = (GObjectFinalizeFunc/* ! */)g_pe_plugin_dispose;
+ object->finalize = (GObjectFinalizeFunc)g_pe_plugin_finalize;
+
+ plugin = G_PLUGIN_MODULE_CLASS(class);
+
+ plugin->enable = (pg_management_fc)g_pe_plugin_enable;
+ plugin->disable = (pg_management_fc)g_pe_plugin_disable;
+
+}
+
+#if 0
+
+/******************************************************************************
+* *
+* Paramètres : iface = interface GLib à initialiser. *
+* *
+* Description : Procède à l'initialisation de l'interface de gestion. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_pe_plugin_plugin_manager_interface_init(GPluginManagerInterface *iface)
+{
+ iface->handle_native = (handle_native_plugins_cb)g_pe_plugin_handle_native_plugins_loaded_event;
+
+}
+
+#endif
+
+
+/******************************************************************************
+* *
+* Paramètres : plugin = instance à initialiser. *
+* *
+* Description : Initialise une instance de greffon de support PE. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_pe_plugin_init(GPePlugin *plugin)
+{
+ STORE_PLUGIN_ABI(plugin);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : plugin = instance d'objet GLib à traiter. *
+* *
+* Description : Supprime toutes les références externes. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_pe_plugin_dispose(GPePlugin *plugin)
+{
+ G_OBJECT_CLASS(g_pe_plugin_parent_class)->dispose(G_OBJECT(plugin));
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : plugin = instance d'objet GLib à traiter. *
+* *
+* Description : Procède à la libération totale de la mémoire. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_pe_plugin_finalize(GPePlugin *plugin)
+{
+ G_OBJECT_CLASS(g_pe_plugin_parent_class)->finalize(G_OBJECT(plugin));
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : filename = nom du fichier à charger. *
+* *
+* Description : Crée un module pour un greffon de support PE. *
+* *
+* Retour : Adresse de la structure mise en place. *
+* *
+* Remarques : Le transfert de propriétée du module est total. *
+* *
+******************************************************************************/
+
+GPluginModule *g_pe_plugin_new(GModule *module)
+{
+ GPePlugin *result; /* Structure à retourner */
+
+ result = g_object_new(G_TYPE_PE_PLUGIN, NULL);
+
+ if (!g_pe_plugin_create(result, module))
+ g_clear_object(&result);
+
+ return G_PLUGIN_MODULE(result);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : plugin = instance à initialiser pleinement. *
+* module = module système correspondant. *
+* *
+* Description : Met en place un module pour un greffon de support PE. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : Le transfert de propriétée du module est total. *
+* *
+******************************************************************************/
+
+bool g_pe_plugin_create(GPePlugin *plugin, GModule *module)
+{
+ bool result; /* Bilan à retourner */
+
#ifdef INCLUDE_PYTHON3_BINDINGS
-# define PG_REQ RL("PyChrysalide")
+# define PG_REQ REQ_LIST("PyChrysalide")
#else
# define PG_REQ NO_REQ
#endif
+ result = g_native_plugin_create(G_NATIVE_PLUGIN(plugin),
+ "PeFmt",
+ "PE format support",
+ PACKAGE_VERSION,
+ CHRYSALIDE_WEBSITE("doc/formats"),
+ PG_REQ,
+ module);
+ return result;
+
+}
-DEFINE_CHRYSALIDE_PLUGIN("Pe", "PE format support",
- PACKAGE_VERSION, CHRYSALIDE_WEBSITE("doc/formats"),
- PG_REQ, AL(PGA_PLUGIN_INIT));//, PGA_CONTENT_RESOLVER));
+/* ---------------------------------------------------------------------------------- */
+/* IMPLEMENTATION DES FONCTIONS DE CLASSE */
+/* ---------------------------------------------------------------------------------- */
+
/******************************************************************************
* *
* Paramètres : plugin = greffon à manipuler. *
* *
-* Description : Prend acte du chargement du greffon. *
+* Description : Prend acte de l'activation du greffon. *
* *
* Retour : - *
* *
@@ -60,7 +269,7 @@ DEFINE_CHRYSALIDE_PLUGIN("Pe", "PE format support",
* *
******************************************************************************/
-G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *plugin)
+static bool g_pe_plugin_enable(GPePlugin *plugin)
{
bool result; /* Bilan à retourner */
@@ -77,6 +286,60 @@ G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *plugin)
/******************************************************************************
* *
+* Paramètres : plugin = greffon à manipuler. *
+* *
+* Description : Prend acte de l'extinction du greffon. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_pe_plugin_disable(GPePlugin *plugin)
+{
+
+}
+
+
+
+#if 0
+
+/* ---------------------------------------------------------------------------------- */
+/* INTERVENTION DANS LA GESTION DE GREFFONS */
+/* INTERVENTION DANS LA GESTION DE GREFFONS */
+/* INTERVENTION DANS LA GESTION DE GREFFONS */
+/* ---------------------------------------------------------------------------------- */
+
+
+/******************************************************************************
+* *
+* Paramètres : plugin = interface à manipuler. *
+* *
+* Description : Accompagne la fin du chargement des modules natifs. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_pe_plugin_handle_native_plugins_loaded_event(GPePlugin *plugin)
+{
+ PyGILState_STATE gstate; /* Sauvegarde d'environnement */
+
+ gstate = PyGILState_Ensure();
+
+ load_python_plugins(G_PLUGIN_MODULE(plugin));
+
+ PyGILState_Release(gstate);
+
+}
+
+
+
+/******************************************************************************
+* *
* Paramètres : plugin = greffon à manipuler. *
* action = type d'action attendue. *
* content = contenu binaire à traiter. *
@@ -115,3 +378,6 @@ G_MODULE_EXPORT void chrysalide_plugin_handle_binary_content(const GPluginModule
}
#endif
+
+
+#endif