diff options
Diffstat (limited to 'plugins/dalvik/operands/args.c')
-rw-r--r-- | plugins/dalvik/operands/args.c | 123 |
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; - -} |