summaryrefslogtreecommitdiff
path: root/src/arch/dalvik/operands/pool.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/dalvik/operands/pool.c')
-rw-r--r--src/arch/dalvik/operands/pool.c52
1 files changed, 17 insertions, 35 deletions
diff --git a/src/arch/dalvik/operands/pool.c b/src/arch/dalvik/operands/pool.c
index 4884867..be38ca3 100644
--- a/src/arch/dalvik/operands/pool.c
+++ b/src/arch/dalvik/operands/pool.c
@@ -33,6 +33,7 @@
#include "../../operand-int.h"
#include "../../sharing/manager.h"
+#include "../../../common/sort.h"
#include "../../../format/dex/pool.h"
@@ -75,11 +76,8 @@ static void g_dalvik_pool_operand_finalize(GDalvikPoolOperand *);
/* Initialise un nouvel objet partagé avec des informations. */
static bool g_dalvik_pool_operand_do_init(GDalvikPoolOperand *, const GDalvikPoolOperand *);
-/* Indique l'objet partagé correspond à une description donnée. */
-static gboolean g_dalvik_pool_operand_compare_info(const GDalvikPoolOperand *, const GDalvikPoolOperand *);
-
/* Compare un opérande avec un autre. */
-static bool g_dalvik_pool_operand_compare(const GDalvikPoolOperand *, const GDalvikPoolOperand *);
+static int g_dalvik_pool_operand_compare(const GDalvikPoolOperand * const *, const GDalvikPoolOperand * const *);
/* Traduit un opérande en version humainement lisible. */
static void g_dalvik_pool_operand_print(const GDalvikPoolOperand *, GBufferLine *, AsmSyntax);
@@ -128,7 +126,6 @@ static void g_dalvik_pool_operand_class_init(GDalvikPoolOperandClass *klass)
operand = G_ARCH_OPERAND_CLASS(klass);
operand->init = (init_shared_fc)g_dalvik_pool_operand_do_init;
- operand->cmp_info = (compare_shared_info_fc)g_dalvik_pool_operand_compare_info;
operand->compare = (operand_compare_fc)g_dalvik_pool_operand_compare;
operand->print = (operand_print_fc)g_dalvik_pool_operand_print;
@@ -241,7 +238,7 @@ GArchOperand *g_dalvik_pool_operand_new(GDexFormat *format, DalvikPoolType type,
fake.type = type;
fake.index = (size == MDS_8_BITS ? index8 : index16);
- result = G_ARCH_OPERAND(g_share_manager_get(_dalvik_pool_operand_manager, &fake));
+ result = G_ARCH_OPERAND(g_share_manager_get(_dalvik_pool_operand_manager, (GSharedInstance *)&fake));
gdpon_exit:
@@ -278,30 +275,6 @@ static bool g_dalvik_pool_operand_do_init(GDalvikPoolOperand *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_pool_operand_compare_info(const GDalvikPoolOperand *operand, const GDalvikPoolOperand *fake)
-{
- gboolean result; /* Bilan à retourner */
-
- result = g_dalvik_pool_operand_compare(operand, fake);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
* Paramètres : a = premier opérande à consulter. *
* b = second opérande à consulter. *
* *
@@ -313,13 +286,22 @@ static gboolean g_dalvik_pool_operand_compare_info(const GDalvikPoolOperand *ope
* *
******************************************************************************/
-static bool g_dalvik_pool_operand_compare(const GDalvikPoolOperand *a, const GDalvikPoolOperand *b)
+static int g_dalvik_pool_operand_compare(const GDalvikPoolOperand * const *a, const GDalvikPoolOperand * const *b)
{
- bool result; /* Bilan à renvoyer */
+ int result; /* Bilan à renvoyer */
+ const GDalvikPoolOperand *_a; /* Accès rapide à l'élément A */
+ const GDalvikPoolOperand *_b; /* Accès rapide à l'élément B */
+
+ _a = *a;
+ _b = *b;
+
+ result = sort_unsigned_long((unsigned long)_a->format, (unsigned long)_b->format);
+
+ if (result == 0)
+ result = sort_unsigned_long(_a->type, _b->type);
- result = (a->format == b->format);
- result &= (a->type == b->type);
- result &= (a->index == b->index);
+ if (result == 0)
+ result = sort_unsigned_long(_a->index, _b->index);
return result;