summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/pychrysalide/analysis/storage/serialize.c71
-rw-r--r--src/analysis/storage/serialize-int.h4
-rw-r--r--src/analysis/storage/serialize.c18
-rw-r--r--src/analysis/storage/serialize.h4
-rw-r--r--src/analysis/storage/storage.c9
5 files changed, 46 insertions, 60 deletions
diff --git a/plugins/pychrysalide/analysis/storage/serialize.c b/plugins/pychrysalide/analysis/storage/serialize.c
index 3bf5183..6e1dd41 100644
--- a/plugins/pychrysalide/analysis/storage/serialize.c
+++ b/plugins/pychrysalide/analysis/storage/serialize.c
@@ -32,7 +32,6 @@
#include "storage.h"
-#include "tpmem.h"
#include "../../access.h"
#include "../../helpers.h"
#include "../../common/packed.h"
@@ -46,10 +45,10 @@
static void py_serializable_object_interface_init(GSerializableObjectIface *, gpointer *);
/* Charge un objet depuis une mémoire tampon. */
-static bool py_serializable_object_load_wrapper(GSerializableObject *, GObjectStorage *, GTypeMemory *, packed_buffer *);
+static bool py_serializable_object_load_wrapper(GSerializableObject *, GObjectStorage *, packed_buffer *);
/* Sauvegarde un objet dans une mémoire tampon. */
-static bool py_serializable_object_store_wrapper(const GSerializableObject *, GObjectStorage *, GTypeMemory *, packed_buffer *);
+static bool py_serializable_object_store_wrapper(const GSerializableObject *, GObjectStorage *, packed_buffer *);
@@ -108,7 +107,6 @@ static void py_serializable_object_interface_init(GSerializableObjectIface *ifac
* *
* Paramètres : object = instruction d'assemblage à consulter. *
* storage = conservateur de données à manipuler ou NULL. *
-* tpmem = mémoire des types d'objets à compléter. *
* pbuf = zone tampon à remplir. *
* *
* Description : Charge un objet depuis une mémoire tampon. *
@@ -119,7 +117,7 @@ static void py_serializable_object_interface_init(GSerializableObjectIface *ifac
* *
******************************************************************************/
-static bool py_serializable_object_load_wrapper(GSerializableObject *object, GObjectStorage *storage, GTypeMemory *tpmem, packed_buffer *pbuf)
+static bool py_serializable_object_load_wrapper(GSerializableObject *object, GObjectStorage *storage, packed_buffer *pbuf)
{
bool result; /* Bilan à retourner */
PyGILState_STATE gstate; /* Sauvegarde d'environnement */
@@ -130,15 +128,14 @@ static bool py_serializable_object_load_wrapper(GSerializableObject *object, GOb
#define SERIALIZABLE_OBJECT_LOAD_WRAPPER PYTHON_WRAPPER_DEF \
( \
- _load, "$self, storage, tpmem, pbuf, /", \
+ _load, "$self, storage, pbuf, /", \
METH_VARARGS, \
"Abstract method used to load an object definition from buffered data.\n" \
"\n" \
"The *storage* is a pychrysalide.analysis.storage.ObjectStorage instance" \
- " provided to store inner objects, if relevant, or None. The *tpmem* object"\
- " is a pychrysalide.analysis.storage.TypeMemory remembering all involved" \
- " GLib types. The *pbuf* argument points to a" \
- " pychrysalide.common.PackedBuffer object containing the data to process.\n"\
+ " provided to store inner objects, if relevant, or None. The *pbuf*" \
+ " argument points to a pychrysalide.common.PackedBuffer object containing" \
+ " the data to process.\n" \
"\n" \
"The result is a boolean indicating the status of the operation." \
)
@@ -159,10 +156,9 @@ static bool py_serializable_object_load_wrapper(GSerializableObject *object, GOb
else
storage_obj = pygobject_new(G_OBJECT(storage));
- args = PyTuple_New(3);
+ args = PyTuple_New(2);
PyTuple_SetItem(args, 0, storage_obj);
- PyTuple_SetItem(args, 1, pygobject_new(G_OBJECT(tpmem)));
- PyTuple_SetItem(args, 2, build_from_internal_packed_buffer(pbuf));
+ PyTuple_SetItem(args, 1, build_from_internal_packed_buffer(pbuf));
pyret = run_python_method(pyobj, "_load", args);
@@ -187,7 +183,6 @@ static bool py_serializable_object_load_wrapper(GSerializableObject *object, GOb
* *
* Paramètres : object = instruction d'assemblage à consulter. *
* storage = conservateur de données à manipuler ou NULL. *
-* tpmem = mémoire des types d'objets à compléter. *
* pbuf = zone tampon à remplir. *
* *
* Description : Sauvegarde un objet dans une mémoire tampon. *
@@ -198,7 +193,7 @@ static bool py_serializable_object_load_wrapper(GSerializableObject *object, GOb
* *
******************************************************************************/
-static bool py_serializable_object_store_wrapper(const GSerializableObject *object, GObjectStorage *storage, GTypeMemory *tpmem, packed_buffer *pbuf)
+static bool py_serializable_object_store_wrapper(const GSerializableObject *object, GObjectStorage *storage, packed_buffer *pbuf)
{
bool result; /* Bilan à retourner */
PyGILState_STATE gstate; /* Sauvegarde d'environnement */
@@ -209,15 +204,14 @@ static bool py_serializable_object_store_wrapper(const GSerializableObject *obje
#define SERIALIZABLE_OBJECT_STORE_WRAPPER PYTHON_WRAPPER_DEF \
( \
- _store, "$self, storage, tpmem, pbuf, /", \
+ _store, "$self, storage, pbuf, /", \
METH_VARARGS, \
"Abstract method used to store an object definition into buffered data.\n" \
"\n" \
"The *storage* is a pychrysalide.analysis.storage.ObjectStorage instance" \
- " provided to store inner objects, if relevant, or None. The *tpmem* object"\
- " is a pychrysalide.analysis.storage.TypeMemory remembering all involved" \
- " GLib types. The *pbuf* argument points to a" \
- " pychrysalide.common.PackedBuffer object containing the data to process.\n"\
+ " provided to store inner objects, if relevant, or None. The *pbuf*" \
+ " argument points to a pychrysalide.common.PackedBuffer object containing" \
+ " the data to process.\n" \
"\n" \
"The result is a boolean indicating the status of the operation." \
)
@@ -238,10 +232,9 @@ static bool py_serializable_object_store_wrapper(const GSerializableObject *obje
else
storage_obj = pygobject_new(G_OBJECT(storage));
- args = PyTuple_New(3);
+ args = PyTuple_New(2);
PyTuple_SetItem(args, 0, storage_obj);
- PyTuple_SetItem(args, 1, pygobject_new(G_OBJECT(tpmem)));
- PyTuple_SetItem(args, 2, build_from_internal_packed_buffer(pbuf));
+ PyTuple_SetItem(args, 1, build_from_internal_packed_buffer(pbuf));
pyret = run_python_method(pyobj, "_store", args);
@@ -285,7 +278,6 @@ static bool py_serializable_object_load(PyObject *self, PyObject *args)
{
PyObject *result; /* Bilan à retourner */
GObjectStorage *storage; /* Conservateur à manipuler */
- GTypeMemory *tpmem; /* Gestionnaire de types */
packed_buffer *pbuf; /* Tampon de données à employer*/
int ret; /* Bilan de lecture des args. */
GSerializableObject *object; /* Version native */
@@ -293,26 +285,25 @@ static bool py_serializable_object_load(PyObject *self, PyObject *args)
#define SERIALIZABLE_OBJECT_LOAD_METHOD PYTHON_METHOD_DEF \
( \
- load, "$self, storage, tpmem, pbuf, /", \
+ load, "$self, storage, pbuf, /", \
METH_VARARGS, py_serializable_object, \
"Load an object definition from buffered data.\n" \
"\n" \
"The *storage* is a pychrysalide.analysis.storage.ObjectStorage instance" \
- " provided to store inner objects, if relevant, or None. The *tpmem* object"\
- " is a pychrysalide.analysis.storage.TypeMemory remembering all involved" \
- " GLib types. The *pbuf* argument points to a" \
- " pychrysalide.common.PackedBuffer object containing the data to process.\n"\
+ " provided to store inner objects, if relevant, or None. The *pbuf*" \
+ " argument points to a pychrysalide.common.PackedBuffer object containing" \
+ " the data to process.\n" \
"\n" \
"The result is a boolean indicating the status of the operation." \
)
- ret = PyArg_ParseTuple(args, "O&O&O&", convert_to_object_storage_or_none, &storage,
- convert_to_type_memory, &tpmem, convert_to_packed_buffer, &pbuf);
+ ret = PyArg_ParseTuple(args, "O&O&", convert_to_object_storage_or_none, &storage,
+ convert_to_packed_buffer, &pbuf);
if (!ret) return NULL;
object = G_SERIALIZABLE_OBJECT(pygobject_get(self));
- status = g_serializable_object_load(object, storage, tpmem, pbuf);
+ status = g_serializable_object_load(object, storage, pbuf);
result = status ? Py_True : Py_False;
Py_INCREF(result);
@@ -339,7 +330,6 @@ static bool py_serializable_object_store(PyObject *self, PyObject *args)
{
PyObject *result; /* Bilan à retourner */
GObjectStorage *storage; /* Conservateur à manipuler */
- GTypeMemory *tpmem; /* Gestionnaire de types */
packed_buffer *pbuf; /* Tampon de données à employer*/
int ret; /* Bilan de lecture des args. */
GSerializableObject *object; /* Version native */
@@ -347,26 +337,25 @@ static bool py_serializable_object_store(PyObject *self, PyObject *args)
#define SERIALIZABLE_OBJECT_STORE_METHOD PYTHON_METHOD_DEF \
( \
- store, "$self, storage, tpmem, pbuf, /", \
+ store, "$self, storage, pbuf, /", \
METH_VARARGS, py_serializable_object, \
"Store an object definition into buffered data.\n" \
"\n" \
"The *storage* is a pychrysalide.analysis.storage.ObjectStorage instance" \
- " provided to store inner objects, if relevant, or None. The *tpmem* object"\
- " is a pychrysalide.analysis.storage.TypeMemory remembering all involved" \
- " GLib types. The *pbuf* argument points to a" \
- " pychrysalide.common.PackedBuffer object containing the data to process.\n"\
+ " provided to store inner objects, if relevant, or None. The *pbuf*" \
+ " argument points to a pychrysalide.common.PackedBuffer object containing" \
+ " the data to process.\n" \
"\n" \
"The result is a boolean indicating the status of the operation." \
)
- ret = PyArg_ParseTuple(args, "O&O&O&", convert_to_object_storage_or_none, &storage,
- convert_to_type_memory, &tpmem, convert_to_packed_buffer, &pbuf);
+ ret = PyArg_ParseTuple(args, "O&O&", convert_to_object_storage_or_none, &storage,
+ convert_to_packed_buffer, &pbuf);
if (!ret) return NULL;
object = G_SERIALIZABLE_OBJECT(pygobject_get(self));
- status = g_serializable_object_store(object, storage, tpmem, pbuf);
+ status = g_serializable_object_store(object, storage, pbuf);
result = status ? Py_True : Py_False;
Py_INCREF(result);
diff --git a/src/analysis/storage/serialize-int.h b/src/analysis/storage/serialize-int.h
index 3a99b52..e7690d5 100644
--- a/src/analysis/storage/serialize-int.h
+++ b/src/analysis/storage/serialize-int.h
@@ -30,10 +30,10 @@
/* Charge un objet depuis une mémoire tampon. */
-typedef bool (* load_serializable_object_cb) (GSerializableObject *, GObjectStorage *, GTypeMemory *, packed_buffer *);
+typedef bool (* load_serializable_object_cb) (GSerializableObject *, GObjectStorage *, packed_buffer *);
/* Sauvegarde un objet dans une mémoire tampon. */
-typedef bool (* store_serializable_object_cb) (const GSerializableObject *, GObjectStorage *, GTypeMemory *, packed_buffer *);
+typedef bool (* store_serializable_object_cb) (const GSerializableObject *, GObjectStorage *, packed_buffer *);
/* Intermédiaire pour la mise en cache d'objet (interface) */
diff --git a/src/analysis/storage/serialize.c b/src/analysis/storage/serialize.c
index 6ed1eab..43a231a 100644
--- a/src/analysis/storage/serialize.c
+++ b/src/analysis/storage/serialize.c
@@ -59,7 +59,6 @@ static void g_serializable_object_default_init(GSerializableObjectInterface *ifa
* *
* Paramètres : object = instruction d'assemblage à consulter. *
* storage = conservateur de données à manipuler ou NULL. *
-* tpmem = mémoire des types d'objets à compléter. *
* pbuf = zone tampon à remplir. *
* *
* Description : Charge un objet depuis une mémoire tampon. *
@@ -70,14 +69,14 @@ static void g_serializable_object_default_init(GSerializableObjectInterface *ifa
* *
******************************************************************************/
-bool g_serializable_object_load(GSerializableObject *object, GObjectStorage *storage, GTypeMemory *tpmem, packed_buffer *pbuf)
+bool g_serializable_object_load(GSerializableObject *object, GObjectStorage *storage, packed_buffer *pbuf)
{
bool result; /* Bilan à retourner */
GSerializableObjectIface *iface; /* Interface utilisée */
iface = G_SERIALIZABLE_OBJECT_GET_IFACE(object);
- result = iface->load(object, storage, tpmem, pbuf);
+ result = iface->load(object, storage, pbuf);
return result;
@@ -88,7 +87,6 @@ bool g_serializable_object_load(GSerializableObject *object, GObjectStorage *sto
* *
* Paramètres : object = instruction d'assemblage à consulter. *
* storage = conservateur de données à manipuler ou NULL. *
-* tpmem = mémoire des types d'objets à compléter. *
* pbuf = zone tampon à remplir. *
* *
* Description : Sauvegarde un objet dans une mémoire tampon. *
@@ -99,20 +97,14 @@ bool g_serializable_object_load(GSerializableObject *object, GObjectStorage *sto
* *
******************************************************************************/
-bool g_serializable_object_store(const GSerializableObject *object, GObjectStorage *storage, GTypeMemory *tpmem, packed_buffer *pbuf)
+bool g_serializable_object_store(const GSerializableObject *object, GObjectStorage *storage, packed_buffer *pbuf)
{
bool result; /* Bilan à retourner */
GSerializableObjectIface *iface; /* Interface utilisée */
- result = g_type_memory_store_object_gtype(tpmem, G_OBJECT(object), pbuf);
-
- if (result)
- {
- iface = G_SERIALIZABLE_OBJECT_GET_IFACE(object);
-
- result = iface->store(object, storage, tpmem, pbuf);
+ iface = G_SERIALIZABLE_OBJECT_GET_IFACE(object);
- }
+ result = iface->store(object, storage, pbuf);
return result;
diff --git a/src/analysis/storage/serialize.h b/src/analysis/storage/serialize.h
index d248b65..96234c1 100644
--- a/src/analysis/storage/serialize.h
+++ b/src/analysis/storage/serialize.h
@@ -55,10 +55,10 @@ GType g_serializable_object_get_type(void) G_GNUC_CONST;
typedef struct _GObjectStorage GObjectStorage;
/* Charge un objet depuis une mémoire tampon. */
-bool g_serializable_object_load(GSerializableObject *, GObjectStorage *, GTypeMemory *, packed_buffer *);
+bool g_serializable_object_load(GSerializableObject *, GObjectStorage *, packed_buffer *);
/* Sauvegarde un objet dans une mémoire tampon. */
-bool g_serializable_object_store(const GSerializableObject *, GObjectStorage *, GTypeMemory *, packed_buffer *);
+bool g_serializable_object_store(const GSerializableObject *, GObjectStorage *, packed_buffer *);
diff --git a/src/analysis/storage/storage.c b/src/analysis/storage/storage.c
index d64a08e..c63f7d0 100644
--- a/src/analysis/storage/storage.c
+++ b/src/analysis/storage/storage.c
@@ -360,7 +360,7 @@ GSerializableObject *g_object_storage_load_object(GObjectStorage *storage, const
if (result)
{
- status = g_serializable_object_load(result, storage, storage->tpmem, &pbuf);
+ status = g_serializable_object_load(result, storage, &pbuf);
if (!status)
g_clear_object(&result);
@@ -402,11 +402,16 @@ bool g_object_storage_store_object(GObjectStorage *storage, const char *name, co
init_packed_buffer(&pbuf);
- result = g_serializable_object_store(object, storage, storage->tpmem, &pbuf);
+ result = g_type_memory_store_object_gtype(storage->tpmem, G_OBJECT(object), &pbuf);
+ if (!result) goto exit;
+
+ result = g_serializable_object_store(object, storage, &pbuf);
if (!result) goto exit;
/* Enregistrement */
+ result = false;
+
g_mutex_lock(&storage->mutex);
backend = g_object_storage_find_backend(storage, name);