summaryrefslogtreecommitdiff
path: root/plugins/dalvik/operands/args.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/dalvik/operands/args.c')
-rw-r--r--plugins/dalvik/operands/args.c123
1 files changed, 14 insertions, 109 deletions
diff --git a/plugins/dalvik/operands/args.c b/plugins/dalvik/operands/args.c
index 7eec5d7..64f8eea 100644
--- a/plugins/dalvik/operands/args.c
+++ b/plugins/dalvik/operands/args.c
@@ -32,8 +32,8 @@
#include <arch/operand-int.h>
#include <common/sort.h>
+#include <core/columns.h>
#include <core/logs.h>
-#include <gtkext/gtkblockdisplay.h>
@@ -97,12 +97,6 @@ static void g_dalvik_args_operand_update_inner_instances(GDalvikArgsOperand *, G
/* Fournit l'empreinte d'un candidat à une centralisation. */
static guint g_dalvik_args_operand_hash(const GDalvikArgsOperand *, bool);
-/* Charge un contenu depuis une mémoire tampon. */
-static bool g_dalvik_args_operand_load(GDalvikArgsOperand *, GObjectStorage *, packed_buffer_t *);
-
-/* Sauvegarde un contenu dans une mémoire tampon. */
-static bool g_dalvik_args_operand_store(GDalvikArgsOperand *, GObjectStorage *, packed_buffer_t *);
-
/* ---------------------------------------------------------------------------------- */
@@ -148,8 +142,8 @@ static void g_dalvik_args_operand_class_init(GDalvikArgsOperandClass *klass)
operand->update_inner = (operand_update_inners_fc)g_dalvik_args_operand_update_inner_instances;
operand->hash = (operand_hash_fc)g_dalvik_args_operand_hash;
- operand->load = (load_operand_fc)g_dalvik_args_operand_load;
- operand->store = (store_operand_fc)g_dalvik_args_operand_store;
+ operand->load = g_arch_operand_load_generic_variadic;
+ operand->store = g_arch_operand_store_generic_variadic;
}
@@ -330,8 +324,8 @@ GArchOperand *g_dalvik_args_operand_get(const GDalvikArgsOperand *operand, size_
static int g_dalvik_args_operand_compare(const GDalvikArgsOperand *a, const GDalvikArgsOperand *b, bool lock)
{
int result; /* Bilan à renvoyer */
- lockable_obj_extra_t *ea; /* Données insérées à consulter*/
- lockable_obj_extra_t *eb; /* Données insérées à consulter*/
+ operand_extra_data_t *ea; /* Données insérées à consulter*/
+ operand_extra_data_t *eb; /* Données insérées à consulter*/
size_t i; /* Boucle de parcours */
GArchOperandClass *class; /* Classe parente normalisée */
@@ -341,8 +335,8 @@ static int g_dalvik_args_operand_compare(const GDalvikArgsOperand *a, const GDal
else
{
- ea = GET_GOBJECT_EXTRA(G_OBJECT(a), lockable_obj_extra_t);
- eb = GET_GOBJECT_EXTRA(G_OBJECT(b), lockable_obj_extra_t);
+ ea = GET_ARCH_OP_EXTRA(G_ARCH_OPERAND(a));
+ eb = GET_ARCH_OP_EXTRA(G_ARCH_OPERAND(b));
if (lock)
{
@@ -586,15 +580,16 @@ static void g_dalvik_args_operand_update_inner_instances(GDalvikArgsOperand *ope
{
size_t i; /* Boucle de parcours */
- assert(count == operand->count);
-
for (i = 0; i < count; i++)
- {
g_object_unref(G_OBJECT(operand->args[i]));
+ operand->count = count;
+ operand->args = realloc(operand->args, operand->count * sizeof(GArchOperand *));
+
+ for (i = 0; i < count; i++)
+ {
operand->args[i] = instances[i];
g_object_ref(G_OBJECT(instances[i]));
-
}
}
@@ -616,10 +611,10 @@ static void g_dalvik_args_operand_update_inner_instances(GDalvikArgsOperand *ope
static guint g_dalvik_args_operand_hash(const GDalvikArgsOperand *operand, bool lock)
{
guint result; /* Valeur à retourner */
- lockable_obj_extra_t *extra; /* Données insérées à consulter*/
+ operand_extra_data_t *extra; /* Données insérées à consulter*/
GArchOperandClass *class; /* Classe parente normalisée */
- extra = GET_GOBJECT_EXTRA(G_OBJECT(operand), lockable_obj_extra_t);
+ extra = GET_ARCH_OP_EXTRA(G_ARCH_OPERAND(operand));
if (lock)
LOCK_GOBJECT_EXTRA(extra);
@@ -635,93 +630,3 @@ static guint g_dalvik_args_operand_hash(const GDalvikArgsOperand *operand, bool
return result;
}
-
-
-/******************************************************************************
-* *
-* Paramètres : operand = élément GLib à constuire. *
-* storage = conservateur de données à manipuler ou NULL. *
-* pbuf = zone tampon à lire. *
-* *
-* Description : Charge un contenu depuis une mémoire tampon. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static bool g_dalvik_args_operand_load(GDalvikArgsOperand *operand, GObjectStorage *storage, packed_buffer_t *pbuf)
-{
- bool result; /* Bilan à retourner */
- GArchOperandClass *parent; /* Classe parente à consulter */
- uleb128_t value; /* Valeur ULEB128 à charger */
- size_t i; /* Boucle de parcours */
- GSerializableObject *arg; /* Nouvel argument à intégrer */
-
- parent = G_ARCH_OPERAND_CLASS(g_dalvik_args_operand_parent_class);
-
- result = parent->load(G_ARCH_OPERAND(operand), storage, pbuf);
-
- if (result)
- result = unpack_uleb128(&value, pbuf);
-
- if (result)
- {
- operand->count = value;
- operand->args = calloc(operand->count, sizeof(GArchOperand *));
- }
-
- for (i = 0; i < operand->count && result; i++)
- {
- arg = g_object_storage_unpack_object(storage, "operands", pbuf);
- if (arg == NULL) break;
-
- operand->args[operand->count - 1] = G_ARCH_OPERAND(arg);
-
- }
-
- result = (i == operand->count);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : operand = élément GLib à consulter. *
-* storage = conservateur de données à manipuler ou NULL. *
-* pbuf = zone tampon à remplir. *
-* *
-* Description : Sauvegarde un contenu dans une mémoire tampon. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static bool g_dalvik_args_operand_store(GDalvikArgsOperand *operand, GObjectStorage *storage, packed_buffer_t *pbuf)
-{
- bool result; /* Bilan à retourner */
- GArchOperandClass *parent; /* Classe parente à consulter */
- size_t i; /* Boucle de parcours */
- GSerializableObject *arg; /* Nouvel argument à intégrer */
-
- parent = G_ARCH_OPERAND_CLASS(g_dalvik_args_operand_parent_class);
-
- result = parent->store(G_ARCH_OPERAND(operand), storage, pbuf);
-
- if (result)
- result = pack_uleb128((uleb128_t []){ operand->count }, pbuf);
-
- for (i = 0; i < operand->count && result; i++)
- {
- arg = G_SERIALIZABLE_OBJECT(operand->args[i]);
- result = g_object_storage_pack_object(storage, "operands", arg, pbuf);
- }
-
- return result;
-
-}