summaryrefslogtreecommitdiff
path: root/src/arch/dalvik/operands/args.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/dalvik/operands/args.c')
-rw-r--r--src/arch/dalvik/operands/args.c54
1 files changed, 17 insertions, 37 deletions
diff --git a/src/arch/dalvik/operands/args.c b/src/arch/dalvik/operands/args.c
index 9e75604..5ba552b 100644
--- a/src/arch/dalvik/operands/args.c
+++ b/src/arch/dalvik/operands/args.c
@@ -30,6 +30,7 @@
#include "../../operand-int.h"
#include "../../sharing/manager.h"
+#include "../../../common/sort.h"
@@ -70,11 +71,8 @@ static void g_dalvik_args_operand_finalize(GDalvikArgsOperand *);
/* Initialise un nouvel objet partagé avec des informations. */
static bool g_dalvik_args_operand_do_init(GDalvikArgsOperand *, const GDalvikArgsOperand *);
-/* Indique l'objet partagé correspond à une description donnée. */
-static gboolean g_dalvik_args_operand_compare_info(const GDalvikArgsOperand *, const GDalvikArgsOperand *);
-
/* Compare un opérande avec un autre. */
-static bool g_dalvik_args_operand_compare(const GDalvikArgsOperand *, const GDalvikArgsOperand *);
+static int g_dalvik_args_operand_compare(const GDalvikArgsOperand * const *, const GDalvikArgsOperand * const *);
/* Traduit un opérande en version humainement lisible. */
static void g_dalvik_args_operand_print(const GDalvikArgsOperand *, GBufferLine *, AsmSyntax);
@@ -122,7 +120,6 @@ static void g_dalvik_args_operand_class_init(GDalvikArgsOperandClass *klass)
object->finalize = (GObjectFinalizeFunc)g_dalvik_args_operand_finalize;
operand->init = (init_shared_fc)g_dalvik_args_operand_do_init;
- operand->cmp_info = (compare_shared_info_fc)g_dalvik_args_operand_compare_info;
operand->compare = (operand_compare_fc)g_dalvik_args_operand_compare;
operand->print = (operand_print_fc)g_dalvik_args_operand_print;
@@ -253,30 +250,6 @@ static bool g_dalvik_args_operand_do_init(GDalvikArgsOperand *operand, const GDa
/******************************************************************************
* *
-* Paramètres : operand = objet partagé à consulter. *
-* fake = coquille vide contenant les infos à comparer. *
-* *
-* Description : Indique l'objet partagé correspond à une description donnée. *
-* *
-* Retour : TRUE si les détails centraux sont partagés, FALSE sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static gboolean g_dalvik_args_operand_compare_info(const GDalvikArgsOperand *operand, const GDalvikArgsOperand *fake)
-{
- gboolean result; /* Bilan à retourner */
-
- result = g_dalvik_args_operand_compare(operand, fake);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
* Paramètres : a = premier opérande à consulter. *
* b = second opérande à consulter. *
* *
@@ -288,20 +261,26 @@ static gboolean g_dalvik_args_operand_compare_info(const GDalvikArgsOperand *ope
* *
******************************************************************************/
-static bool g_dalvik_args_operand_compare(const GDalvikArgsOperand *a, const GDalvikArgsOperand *b)
+static int g_dalvik_args_operand_compare(const GDalvikArgsOperand * const *a, const GDalvikArgsOperand * const *b)
{
- bool result; /* Bilan à renvoyer */
+ int result; /* Bilan à renvoyer */
+ const GDalvikArgsOperand *_a; /* Accès rapide à l'élément A */
+ const GDalvikArgsOperand *_b; /* Accès rapide à l'élément B */
size_t i; /* Boucle de parcours */
- if (b == NULL)
- result = (a->count == 0);
+ _a = *a;
+ _b = *b;
+
+ if (_b == NULL)
+ result = sort_unsigned_long(_a->count, 0);
else
{
- result = (a->count == b->count);
+ result = sort_unsigned_long(_a->count, _b->count);
- for (i = 0; i < a->count && result; i++)
- result = g_arch_operand_compare(a->args[i], b->args[i]);
+ for (i = 0; i < _a->count && result == 0; i++)
+ result = g_arch_operand_compare((const GArchOperand * const *)&_a->args[i],
+ (const GArchOperand * const *)&_b->args[i]);
}
@@ -377,7 +356,8 @@ GDalvikArgsOperand *g_dalvik_args_operand_add(GDalvikArgsOperand *operand, GArch
fake.args[i] = arg;
- result = g_share_manager_update(_dalvik_args_operand_manager, G_SHARED_INSTANCE(operand), &fake, container);
+ result = g_share_manager_update(_dalvik_args_operand_manager, G_SHARED_INSTANCE(operand),
+ (GSharedInstance *)&fake, container);
free(fake.args);