summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/pychrysalide/analysis/db/certs.c6
-rw-r--r--plugins/pychrysalide/arch/instriter.c7
-rw-r--r--plugins/pychrysalide/arch/vmpa.c12
-rw-r--r--plugins/pychrysalide/common/bits.c6
-rw-r--r--plugins/pychrysalide/common/fnv1a.c9
-rw-r--r--plugins/pychrysalide/common/pathname.c7
-rw-r--r--plugins/pychrysalide/format/symiter.c7
-rw-r--r--plugins/pychrysalide/glibext/configuration.c8
-rw-r--r--plugins/pychrysalide/gui/core/items.c6
-rw-r--r--plugins/pychrysalide/helpers.c135
-rw-r--r--plugins/pychrysalide/helpers.h3
-rw-r--r--plugins/pychrysalide/struct.c11
12 files changed, 129 insertions, 88 deletions
diff --git a/plugins/pychrysalide/analysis/db/certs.c b/plugins/pychrysalide/analysis/db/certs.c
index 385e277..61b5f58 100644
--- a/plugins/pychrysalide/analysis/db/certs.c
+++ b/plugins/pychrysalide/analysis/db/certs.c
@@ -312,7 +312,6 @@ bool ensure_python_certs_is_registered(void)
{
PyTypeObject *type; /* Type Python pour 'certs' */
PyObject *module; /* Module à recompléter */
- int ret; /* Bilan d'un appel */
type = get_python_certs_type();
@@ -325,10 +324,7 @@ bool ensure_python_certs_is_registered(void)
module = get_access_to_python_module("pychrysalide.analysis.db");
- Py_INCREF(type);
- ret = PyModule_AddObject(module, "certs", (PyObject *)type);
-
- if (ret != 0)
+ if (!register_python_module_object(module, type))
return false;
}
diff --git a/plugins/pychrysalide/arch/instriter.c b/plugins/pychrysalide/arch/instriter.c
index f665cba..9b149fd 100644
--- a/plugins/pychrysalide/arch/instriter.c
+++ b/plugins/pychrysalide/arch/instriter.c
@@ -33,6 +33,7 @@
#include "processor.h"
#include "../access.h"
+#include "../helpers.h"
@@ -263,7 +264,6 @@ bool ensure_python_instr_iterator_is_registered(void)
{
PyTypeObject *type; /* Type Python 'InstrIterator' */
PyObject *module; /* Module à recompléter */
- int ret; /* Bilan d'un appel */
type = get_python_instr_iterator_type();
@@ -274,10 +274,7 @@ bool ensure_python_instr_iterator_is_registered(void)
module = get_access_to_python_module("pychrysalide.arch");
- Py_INCREF(type);
- ret = PyModule_AddObject(module, "InstrIterator", (PyObject *)type);
-
- if (ret != 0)
+ if (!register_python_module_object(module, type))
return false;
}
diff --git a/plugins/pychrysalide/arch/vmpa.c b/plugins/pychrysalide/arch/vmpa.c
index cdf20c9..f2450bb 100644
--- a/plugins/pychrysalide/arch/vmpa.c
+++ b/plugins/pychrysalide/arch/vmpa.c
@@ -662,7 +662,6 @@ bool ensure_python_vmpa_is_registered(void)
{
PyTypeObject *type; /* Type Python pour 'vmpa' */
PyObject *module; /* Module à recompléter */
- int ret; /* Bilan d'un appel */
type = get_python_vmpa_type();
@@ -676,10 +675,7 @@ bool ensure_python_vmpa_is_registered(void)
module = get_access_to_python_module("pychrysalide.arch");
- Py_INCREF(type);
- ret = PyModule_AddObject(module, "vmpa", (PyObject *)type);
-
- if (ret != 0)
+ if (!register_python_module_object(module, type))
return false;
}
@@ -1260,7 +1256,6 @@ bool ensure_python_mrange_is_registered(void)
{
PyTypeObject *type; /* Type Python pour 'mrange' */
PyObject *module; /* Module à recompléter */
- int ret; /* Bilan d'un appel */
type = get_python_mrange_type();
@@ -1271,10 +1266,7 @@ bool ensure_python_mrange_is_registered(void)
module = get_access_to_python_module("pychrysalide.arch");
- Py_INCREF(type);
- ret = PyModule_AddObject(module, "mrange", (PyObject *)type);
-
- if (ret != 0)
+ if (!register_python_module_object(module, type))
return false;
}
diff --git a/plugins/pychrysalide/common/bits.c b/plugins/pychrysalide/common/bits.c
index 62aeb6d..7a6454d 100644
--- a/plugins/pychrysalide/common/bits.c
+++ b/plugins/pychrysalide/common/bits.c
@@ -762,7 +762,6 @@ bool ensure_python_bitfield_is_registered(void)
{
PyTypeObject *type; /* Type Python pour 'bitfield' */
PyObject *module; /* Module à recompléter */
- int ret; /* Bilan d'un appel */
type = get_python_bitfield_type();
@@ -773,10 +772,7 @@ bool ensure_python_bitfield_is_registered(void)
module = get_access_to_python_module("pychrysalide.common");
- Py_INCREF(type);
- ret = PyModule_AddObject(module, "bitfield", (PyObject *)type);
-
- if (ret != 0)
+ if (!register_python_module_object(module, type))
return false;
}
diff --git a/plugins/pychrysalide/common/fnv1a.c b/plugins/pychrysalide/common/fnv1a.c
index 759c7ea..5caad48 100644
--- a/plugins/pychrysalide/common/fnv1a.c
+++ b/plugins/pychrysalide/common/fnv1a.c
@@ -32,6 +32,7 @@
#include "../access.h"
+#include "../helpers.h"
@@ -130,9 +131,8 @@ PyTypeObject *get_python_fnv1a_type(void)
bool ensure_python_fnv1a_is_registered(void)
{
- PyTypeObject *type; /* Type Python pour 'fnv1a' */
+ PyTypeObject *type; /* Type Python pour 'fnv1a' */
PyObject *module; /* Module à recompléter */
- int ret; /* Bilan d'un appel */
type = get_python_fnv1a_type();
@@ -145,10 +145,7 @@ bool ensure_python_fnv1a_is_registered(void)
module = get_access_to_python_module("pychrysalide.common");
- Py_INCREF(type);
- ret = PyModule_AddObject(module, "fnv1a", (PyObject *)type);
-
- if (ret != 0)
+ if (!register_python_module_object(module, type))
return false;
}
diff --git a/plugins/pychrysalide/common/pathname.c b/plugins/pychrysalide/common/pathname.c
index c2d69c6..e07ebe5 100644
--- a/plugins/pychrysalide/common/pathname.c
+++ b/plugins/pychrysalide/common/pathname.c
@@ -36,6 +36,7 @@
#include "../access.h"
+#include "../helpers.h"
@@ -190,7 +191,6 @@ bool ensure_python_pathname_is_registered(void)
{
PyTypeObject *type; /* Type Python pour 'pathname' */
PyObject *module; /* Module à recompléter */
- int ret; /* Bilan d'un appel */
type = get_python_pathname_type();
@@ -203,10 +203,7 @@ bool ensure_python_pathname_is_registered(void)
module = get_access_to_python_module("pychrysalide.common");
- Py_INCREF(type);
- ret = PyModule_AddObject(module, "pathname", (PyObject *)type);
-
- if (ret != 0)
+ if (!register_python_module_object(module, type))
return false;
}
diff --git a/plugins/pychrysalide/format/symiter.c b/plugins/pychrysalide/format/symiter.c
index 74a215d..03a0ec8 100644
--- a/plugins/pychrysalide/format/symiter.c
+++ b/plugins/pychrysalide/format/symiter.c
@@ -33,6 +33,7 @@
#include "format.h"
#include "../access.h"
+#include "../helpers.h"
@@ -263,7 +264,6 @@ bool ensure_python_sym_iterator_is_registered(void)
{
PyTypeObject *type; /* Type Python 'SymIterator' */
PyObject *module; /* Module à recompléter */
- int ret; /* Bilan d'un appel */
type = get_python_sym_iterator_type();
@@ -274,10 +274,7 @@ bool ensure_python_sym_iterator_is_registered(void)
module = get_access_to_python_module("pychrysalide.format");
- Py_INCREF(type);
- ret = PyModule_AddObject(module, "SymIterator", (PyObject *)type);
-
- if (ret != 0)
+ if (!register_python_module_object(module, type))
return false;
}
diff --git a/plugins/pychrysalide/glibext/configuration.c b/plugins/pychrysalide/glibext/configuration.c
index 18d681f..e74f0a4 100644
--- a/plugins/pychrysalide/glibext/configuration.c
+++ b/plugins/pychrysalide/glibext/configuration.c
@@ -782,9 +782,8 @@ PyTypeObject *get_python_config_param_iterator_type(void)
bool ensure_python_config_param_iterator_is_registered(void)
{
- PyTypeObject *type; /* Type Python 'Cnf...Iter'*/
+ PyTypeObject *type; /* Type Python 'Cnf...Iter' */
PyObject *module; /* Module à recompléter */
- int ret; /* Bilan d'un appel */
type = get_python_config_param_iterator_type();
@@ -797,10 +796,7 @@ bool ensure_python_config_param_iterator_is_registered(void)
if (PyType_Ready(type) != 0)
return false;
- Py_INCREF(type);
- ret = PyModule_AddObject(module, "ConfigParamIterator", (PyObject *)type);
-
- if (ret != 0)
+ if (!register_python_module_object(module, type))
return false;
}
diff --git a/plugins/pychrysalide/gui/core/items.c b/plugins/pychrysalide/gui/core/items.c
index 82c2c1c..0912bc4 100644
--- a/plugins/pychrysalide/gui/core/items.c
+++ b/plugins/pychrysalide/gui/core/items.c
@@ -258,7 +258,6 @@ bool ensure_python_items_is_registered(void)
{
PyTypeObject *type; /* Type Python de 'items' */
PyObject *module; /* Module à recompléter */
- int ret; /* Bilan d'un appel */
type = get_python_items_type();
@@ -271,10 +270,7 @@ bool ensure_python_items_is_registered(void)
module = get_access_to_python_module("pychrysalide.gui.core");
- Py_INCREF(type);
- ret = PyModule_AddObject(module, "items", (PyObject *)type);
-
- if (ret != 0)
+ if (!register_python_module_object(module, type))
return false;
}
diff --git a/plugins/pychrysalide/helpers.c b/plugins/pychrysalide/helpers.c
index 5ef10eb..be580a4 100644
--- a/plugins/pychrysalide/helpers.c
+++ b/plugins/pychrysalide/helpers.c
@@ -35,6 +35,14 @@
+/* ---------------------------- MISE EN PLACE DE MODULES ---------------------------- */
+
+
+/* Ajoute une classe dans les fonctionnalités globales. */
+static bool include_python_type_into_features(PyObject *, PyTypeObject *);
+
+
+
/* ---------------------------------------------------------------------------------- */
/* ACCELERATEURS POUR PYTHON UNIQUEMENT */
/* ---------------------------------------------------------------------------------- */
@@ -297,7 +305,11 @@ PyObject *build_python_module(PyObject *super, PyModuleDef *def)
Py_INCREF(result);
ret = PyModule_AddObject(super, dot + 1, result);
- if (ret != 0) goto bad_exit;
+ if (ret != 0)
+ {
+ Py_DECREF(result);
+ goto bad_exit;
+ }
register_access_to_python_module(def->m_name, result);
@@ -372,6 +384,94 @@ bool register_python_module_methods(PyObject *module, PyMethodDef *defs)
}
+/******************************************************************************
+* *
+* Paramètres : dict = dictionnaire où conserver une référence au type créé. *
+* type = type dans sa version Python. *
+* *
+* Description : Ajoute une classe dans les fonctionnalités globales. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static bool include_python_type_into_features(PyObject *dict, PyTypeObject *type)
+{
+ bool result; /* Bilan à retourner */
+ PyObject *features; /* Module à recompléter */
+ PyObject *features_dict; /* Dictionnaire à compléter */
+ char *name; /* Désignation de la classe */
+ PyObject *item; /* Nouvel élément à exporter */
+ int ret; /* Bilan d'une insertion */
+
+ features = get_access_to_python_module("pychrysalide.features");
+
+ features_dict = PyModule_GetDict(features);
+
+ name = strrchr(type->tp_name, '.');
+ assert(name != NULL);
+
+ name++;
+
+ item = PyDict_GetItemString(dict, name);
+ result = (item != NULL);
+ assert(result);
+
+ ret = PyDict_SetItemString(features_dict, name, item);
+ result = (ret == 0);
+ assert(result);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : module = module dont la définition est à compléter. *
+* type = type à intégrer dans sa version Python. *
+* *
+* Description : Met en place un objet au sein d'un module Python. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool register_python_module_object(PyObject *module, PyTypeObject *type)
+{
+ bool result; /* Bilan à retourner */
+ char *name; /* Désignation de la classe */
+ int ret; /* Bilan d'un appel */
+ PyObject *dict; /* Dictionnaire du module */
+
+ name = strrchr(type->tp_name, '.');
+ assert(name != NULL);
+
+ name++;
+
+ Py_INCREF(type);
+ ret = PyModule_AddObject(module, name, (PyObject *)type);
+
+ result = (ret == 0);
+
+ if (!result)
+ Py_DECREF(type);
+
+ else
+ {
+ dict = PyModule_GetDict(module);
+ result = include_python_type_into_features(dict, type);
+ }
+
+ return result;
+
+}
+
+
/* ---------------------------------------------------------------------------------- */
/* CONFORTS CIBLANT PYGOBJECT */
@@ -494,10 +594,10 @@ PyTypeObject *define_python_dynamic_type(const PyTypeObject *spec)
/******************************************************************************
* *
-* Paramètres : module = module où conserver une référence au type créé. *
-* gtype = type dans sa version GLib. *
-* type = type dans sa version Python. *
-* base = type de base de l'objet. *
+* Paramètres : dict = dictionnaire où conserver une référence au type créé.*
+* gtype = type dans sa version GLib. *
+* type = type dans sa version Python. *
+* base = type de base de l'objet. *
* *
* Description : Enregistre correctement une surcouche de conversion GObject. *
* *
@@ -514,11 +614,6 @@ bool _register_class_for_pygobject(PyObject *dict, GType gtype, PyTypeObject *ty
PyObject *static_bases; /* Base(s) de l'objet */
va_list ap; /* Parcours des arguments */
PyTypeObject *static_base; /* Base à rajouter à la liste */
- PyObject *features; /* Module à recompléter */
- PyObject *features_dict; /* Dictionnaire à compléter */
- char *name; /* Désignation de la classe */
- PyObject *item; /* Nouvel élément à exporter */
- int ret; /* Bilan d'une insertion */
/**
* pygobject_register_class() définit type->tp_base à partir des arguments fournis,
@@ -597,25 +692,7 @@ bool _register_class_for_pygobject(PyObject *dict, GType gtype, PyTypeObject *ty
*/
if (result)
- {
- features = get_access_to_python_module("pychrysalide.features");
-
- features_dict = PyModule_GetDict(features);
-
- name = strrchr(type->tp_name, '.');
- assert(name != NULL);
-
- name++;
-
- item = PyDict_GetItemString(dict, name);
- assert(item != NULL);
-
- ret = PyDict_SetItemString(features_dict, name, item);
- assert(ret == 0);
-
- result = (ret == 0);
-
- }
+ result = include_python_type_into_features(dict, type);
return result;
diff --git a/plugins/pychrysalide/helpers.h b/plugins/pychrysalide/helpers.h
index 486ebdc..9f02daa 100644
--- a/plugins/pychrysalide/helpers.h
+++ b/plugins/pychrysalide/helpers.h
@@ -67,6 +67,9 @@ PyObject *build_python_module(PyObject *, PyModuleDef *);
/* Met en place une série de méthodes pour un module Python. */
bool register_python_module_methods(PyObject *, PyMethodDef *);
+/* Met en place un objet au sein d'un module Python. */
+bool register_python_module_object(PyObject *, PyTypeObject *);
+
/* --------------------------- CONFORTS CIBLANT PYGOBJECT --------------------------- */
diff --git a/plugins/pychrysalide/struct.c b/plugins/pychrysalide/struct.c
index 98704c0..d4d6a9f 100644
--- a/plugins/pychrysalide/struct.c
+++ b/plugins/pychrysalide/struct.c
@@ -26,6 +26,7 @@
#include "access.h"
+#include "helpers.h"
@@ -147,7 +148,6 @@ bool ensure_python_py_struct_is_registered(void)
{
PyTypeObject *type; /* Type Python 'PyStructObject'*/
PyObject *module; /* Module à recompléter */
- int ret; /* Bilan des préparatifs */
type = get_python_py_struct_type();
@@ -155,14 +155,11 @@ bool ensure_python_py_struct_is_registered(void)
{
module = get_access_to_python_module("pychrysalide");
- ret = PyType_Ready(type);
-
- if (ret != 0)
+ if (PyType_Ready(type) != 0)
return false;
- Py_INCREF(type);
-
- PyModule_AddObject(module, "PyStructObject", (PyObject *)type);
+ if (!register_python_module_object(module, type))
+ return false;
}