summaryrefslogtreecommitdiff
path: root/plugins/pychrysalide
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2020-11-22 22:36:53 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2020-11-22 22:36:53 (GMT)
commit6122bb7f34b178d4c07285adae16afcc55294b1f (patch)
treecb9b2b2b19ef43d4782a228f28143e745e18c5dd /plugins/pychrysalide
parentf20d4a9ec9fa9382a562844de83b5380103283b3 (diff)
Provided a configuration directory for plugins.
Diffstat (limited to 'plugins/pychrysalide')
-rw-r--r--plugins/pychrysalide/plugin.c177
1 files changed, 177 insertions, 0 deletions
diff --git a/plugins/pychrysalide/plugin.c b/plugins/pychrysalide/plugin.c
index 463fece..a552aaa 100644
--- a/plugins/pychrysalide/plugin.c
+++ b/plugins/pychrysalide/plugin.c
@@ -26,6 +26,7 @@
#include <assert.h>
+#include <libgen.h>
#include <malloc.h>
#include <pygobject.h>
#include <string.h>
@@ -116,14 +117,26 @@ static void g_python_plugin_dispose(GPythonPlugin *);
/* Description : Procède à la libération totale de la mémoire. */
static void g_python_plugin_finalize(GPythonPlugin *);
+/* Fournit le nom brut associé au greffon. */
+static char *g_python_plugin_get_modname(const GPythonPlugin *);
+
/* ------------------------- MODULE PYTHON POUR LES SCRIPTS ------------------------- */
+/* Construit le nom d'un fichier de configuration du greffon. */
+static PyObject *py_plugin_module_build_config_filename(PyObject *, PyObject *);
+
/* Affiche un message dans le journal des messages système. */
static PyObject *py_plugin_module_log_message(PyObject *, PyObject *);
+/* Fournit le nom brut associé au greffon. */
+static PyObject *py_plugin_module_get_modname(PyObject *, void *);
+
+/* Indique le fichier contenant le greffon manipulé. */
+static PyObject *py_plugin_module_get_filename(PyObject *, void *);
+
/* ---------------------------------------------------------------------------------- */
@@ -1054,12 +1067,17 @@ G_DEFINE_TYPE(GPythonPlugin, g_python_plugin, G_TYPE_PLUGIN_MODULE);
static void g_python_plugin_class_init(GPythonPluginClass *klass)
{
GObjectClass *object; /* Autre version de la classe */
+ GPluginModuleClass *plugin; /* Version parente de la classe*/
object = G_OBJECT_CLASS(klass);
object->dispose = (GObjectFinalizeFunc/* ! */)g_python_plugin_dispose;
object->finalize = (GObjectFinalizeFunc)g_python_plugin_finalize;
+ plugin = G_PLUGIN_MODULE_CLASS(klass);
+
+ plugin->get_modname = (pg_get_modname_fc)g_python_plugin_get_modname;
+
}
@@ -1175,6 +1193,34 @@ static void g_python_plugin_finalize(GPythonPlugin *plugin)
/******************************************************************************
* *
+* Paramètres : plugin = greffon à valider. *
+* *
+* Description : Fournit le nom brut associé au greffon. *
+* *
+* Retour : Désignation brute du greffon. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static char *g_python_plugin_get_modname(const GPythonPlugin *plugin)
+{
+ char *result; /* Désignation brute à renvoyer*/
+ char *path; /* Chemin à traiter */
+
+ path = strdup(g_plugin_module_get_filename(G_PLUGIN_MODULE(plugin)));
+
+ result = strdup(basename(path));
+
+ free(path);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : modname = nom du module à charger. *
* filename = chemin d'accès au code Python à charger. *
* *
@@ -1261,6 +1307,62 @@ GPluginModule *g_python_plugin_new(const char *modname, const char *filename)
* Paramètres : self = objet Python concerné par l'appel. *
* args = arguments fournis à l'appel. *
* *
+* Description : Construit le nom d'un fichier de configuration du greffon. *
+* *
+* Retour : Chemin d'accès déterminé, ou NULL en cas d'erreur. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static PyObject *py_plugin_module_build_config_filename(PyObject *self, PyObject *args)
+{
+ PyObject *result; /* Bilan à retourner */
+ const char *final; /* Suffixe de fichier imposé */
+ int create; /* Volonté de création */
+ char *filename; /* Nom de fichier déterminé */
+
+#define PLUGIN_MODULE_BUILD_CONFIG_FILENAME_METHOD PYTHON_METHOD_DEF \
+( \
+ build_config_filename, "final, /, create=False", \
+ METH_VARARGS, py_plugin_module, \
+ "Build a filename suitable for the plugin configuration, ending with" \
+ " the *final* suffix.\n" \
+ "\n" \
+ "If the *create* parameter is set, the path to this filename is" \
+ " created.\n" \
+ "\n" \
+ "The result is a string or None on failure." \
+)
+
+ create = 0;
+
+ if (!PyArg_ParseTuple(args, "s|p", &final, &create))
+ return NULL;
+
+ filename = g_plugin_module_build_config_filename(G_PLUGIN_MODULE(pygobject_get(self)), final, create);
+
+ if (filename != NULL)
+ {
+ result = PyUnicode_FromString(filename);
+ free(filename);
+ }
+ else
+ {
+ result = Py_None;
+ Py_INCREF(result);
+ }
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : self = objet Python concerné par l'appel. *
+* args = arguments fournis à l'appel. *
+* *
* Description : Affiche un message dans le journal des messages système. *
* *
* Retour : Rien en équivalent Python. *
@@ -1305,6 +1407,78 @@ static PyObject *py_plugin_module_log_message(PyObject *self, PyObject *args)
/******************************************************************************
* *
+* Paramètres : self = objet Python concerné par l'appel. *
+* closure = non utilisé ici. *
+* *
+* Description : Fournit le nom brut associé au greffon. *
+* *
+* Retour : Désignation brute du greffon. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static PyObject *py_plugin_module_get_modname(PyObject *self, void *closure)
+{
+ PyObject *result; /* Valeur à retourner */
+ GPluginModule *plugin; /* Version native du greffon */
+ char *modname; /* Désignation brute */
+
+#define PLUGIN_MODULE_MODNAME_ATTRIB PYTHON_GET_DEF_FULL \
+( \
+ modname, py_plugin_module, \
+ "Raw module name of the plugin." \
+)
+
+ plugin = G_PLUGIN_MODULE(pygobject_get(self));
+ modname = g_plugin_module_get_modname(plugin);
+
+ result = PyUnicode_FromString(modname);
+
+ free(modname);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : self = objet Python concerné par l'appel. *
+* closure = non utilisé ici. *
+* *
+* Description : Indique le fichier contenant le greffon manipulé. *
+* *
+* Retour : Chemin d'accès au greffon. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static PyObject *py_plugin_module_get_filename(PyObject *self, void *closure)
+{
+ PyObject *result; /* Valeur à retourner */
+ GPluginModule *plugin; /* Version native du greffon */
+ const char *filename; /* Chemin d'accès associé */
+
+#define PLUGIN_MODULE_FILENAME_ATTRIB PYTHON_GET_DEF_FULL \
+( \
+ filename, py_plugin_module, \
+ "Filename of the plugin." \
+)
+
+ plugin = G_PLUGIN_MODULE(pygobject_get(self));
+ filename = g_plugin_module_get_filename(plugin);
+
+ result = PyUnicode_FromString(filename);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : - *
* *
* Description : Fournit un accès à une définition de type à diffuser. *
@@ -1327,11 +1501,14 @@ PyTypeObject *get_python_plugin_module_type(void)
PLUGIN_MODULE_ATTACH_DEBUG_FORMAT_WRAPPER,
PLUGIN_MODULE_PROCESS_DISASSEMBLY_EVENT_WRAPPER,
PLUGIN_MODULE_DETECT_EXTERNAL_TOOLS_WRAPPER,
+ PLUGIN_MODULE_BUILD_CONFIG_FILENAME_METHOD,
PLUGIN_MODULE_LOG_MESSAGE_METHOD,
{ NULL }
};
static PyGetSetDef py_plugin_module_getseters[] = {
+ PLUGIN_MODULE_MODNAME_ATTRIB,
+ PLUGIN_MODULE_FILENAME_ATTRIB,
{ NULL }
};